引入依赖
<!-- 引入 redis 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置redis
可以在 SpringBoot autoconfigure 的 RedisAutoConfiguration 里找到 RedisProperties ,查看有哪些配置项
包含 基本连接设置,哨兵和集群配置
2.x 以上版本默认使用 lettuce,使用 Jedis 是不会注入的,要另导入依赖
如果配置连接池要配置 lettuce
spring:
redis:
database: 1
host: 192.168.1.191
port: 6379
password: some_pwd # 如果未单独配置默认为空即可
- @ConditionalOnMissingBean 如果没有这个类,就执行注入.
- 如果这个类已经生成,也就是可以自定义 redisTemplate 类然后替换掉这里的配置。
- 可以看到这里 RedisTemplate 没有其他设置,没有序列化的配置
- key,value 都是 Object 类型,直接使用需要强制转换
如果只操作 String 类型,就直接使用 StringRedisTemplate 就可以了
封装一下 StringRedisTemplate
```java public class RedisOperator { @Resource private StringRedisTemplate redisTemplate;
/**
- TTL key,以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。
- @param key key
@return 剩余生存时间 */ public Long ttl(String key) { return redisTemplate.getExpire(key); }
/**
- 删除一个key
@param key key */ public void del(String key) { redisTemplate.delete(key); }
/**
- 设置key-value和超时时间(秒)
- @param key key
- @param value value
@param timeout timeout (s) */ public void set(String key, String value, long timeout) { redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS); }
/**
- 返回 key所关联的字符串值。
- @param key key
@return value */ public String get(String key) { return (String)redisTemplate.opsForValue().get(key); }
/**
- 设置 map 中所有值到 哈希表 key
- @param key
@param map */ public void hPutAll(String key, Map
map) { redisTemplate.opsForHash().putAll(key, map); } /**
- 将哈希表 key 中的域 field 的值设为 value
- @param key key
- @param field field
@param value value */ public void hPut(String key, String field, Object value) { redisTemplate.opsForHash().put(key, field, value); }
/**
- 返回哈希表 key 中给定域 field 的值
- @param key key
- @param field field
@return value */ public String hGet(String key, String field) { return (String) redisTemplate.opsForHash().get(key, field); }
/**
- 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
- @param key key
@param fields fields */ public void hDel(String key, Object… fields) { redisTemplate.opsForHash().delete(key, fields); }
/**
- 返回哈希表 key 中,所有的域和值
- @param key key
@return map */ public Map
/**
- 将一个值 value 插入到列表 key 的表头
- @param key key
- @param value value
@return 列表长度 */ public Long lPush(String key, String value) { return redisTemplate.opsForList().leftPush(key, value); }
/**
- 移除并返回列表 key 的头元素
- @param key key
@return value 头元素 */ public String lPop(String key) { return redisTemplate.opsForList().leftPop(key); }
/**
- 将一个值 value 插入到列表 key 的表尾(最右边)
- @param key key
- @param value value
- @return 列表长度 */ public Long rPush(String key, String value) { return redisTemplate.opsForList().rightPush(key, value); } }
<a name="oN5Pv"></a>
## 自定义序列化
序列化:把 java 对象转换为 二进制/字符串,存储到内存中。<br />反序列化:读取内存中的 二进制/字符串,转换为 java 对象。
SpringBoot 提供了:<br />JdkSerializationRedisSerializer(默认)<br />StringRedisSerializer<br />项目中一般是 自定义 json 序列化
创建 RedisConfig 配置类
```java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
// 为了方便,一般直接使用 <String, Object>
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
// 序列化 json 配置
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// String 的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key 用 String 序列化
template.setKeySerializer(stringRedisSerializer);
// value 采用 jackson 序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash 的 key 也用 String 序列化
template.setHashKeySerializer(stringRedisSerializer);
// hash 的 value 采用 jackson 序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}