SpringBoot RedisTemplate
Jedis和RedisTemplate有何区别?
Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。
SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache
在Java中使用redisTemplate操作缓存的方法示例
https://www.jb51.net/article/154899.htm
RedisTemplate的各种操作(set、map、list、value)
https://blog.csdn.net/qq_40784783/article/details/82019543
实战操作
public class DefaultRedisConfig {
@Bean
@Primary
public RedisTemplate<String, Object> redisCacheTemplate(LettuceConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
template.setConnectionFactory(factory);
return template;
}
}
@Autowired
private RedisTemplate redisCacheTemplate;
@Autowired
private RedisTemplate<String, String> redisCacheTemplate;
@Test
public void mainRedis() {
// 删除key
// redisCacheTemplate.delete("zhutoString");
// 根据Key查询长度
System.out.println("size:" + redisCacheTemplate.opsForList().size("zhutoList"));
// 添加 String 类型的值
redisCacheTemplate.opsForValue().set("zhutoString", 123456, 60 * 10, TimeUnit.SECONDS);
// 添加 Set 类型的值
redisCacheTemplate.opsForSet().add("zhutoSet", "123456");
redisCacheTemplate.opsForSet().add("zhutoSet", "456789");
// 添加 List 类型的值
// 往现有数据的左边添加数据
redisCacheTemplate.opsForList().leftPush("zhutoList", "A123456");
redisCacheTemplate.opsForList().leftPush("zhutoList", "B456789");
// 往现有数据的右边添加数据
redisCacheTemplate.opsForList().rightPush("zhutoList", "C123456");
redisCacheTemplate.opsForList().leftPush("zhutoList", "D456789");
// 添加 Hash 类型的值
redisCacheTemplate.opsForHash().put("zhutoHash", "zhuto1", "123456");
redisCacheTemplate.opsForHash().put("zhutoHash", "zhuto2", "456789");
// 添加 SortedSet 类型的值
redisCacheTemplate.opsForZSet().add("zhutoSortedSet", "zhuto1", 1.0);
redisCacheTemplate.opsForZSet().add("zhutoSortedSet", "zhuto2", 2.0);
// 获取所有的Key
Set<String> keys = redisCacheTemplate.keys("*");
Iterator<String> it = keys.iterator();
// 循环Key去查询相对于的Value
while (it.hasNext()) {
Object key = it.next();
Long expirationTime = redisCacheTemplate.getExpire(key);
String value = getValue(key);
System.out.println("key:" + key + "--- expirationTime:" + expirationTime + "--- value:" + value);
}
}
public String getValue(Object key) {
// 根据Key获取相对于的类型
Object type = redisCacheTemplate.type(key);
// 为了显示做了一个集合
List<RedisBean> redisBeanList = Lists.newArrayList();
// 类型为HASH的处理方式
if ("HASH".equals(type.toString())) {
Map<String, String> map = redisCacheTemplate.opsForHash().entries(key);
for (String keys : map.keySet()) {
Object json = map.get(keys);
RedisBean redisBean = new RedisBean();
redisBean.setKey(keys);
redisBean.setValue(json);
redisBeanList.add(redisBean);
}
return JsonTools.objectToJson(redisBeanList);
}
// 类型为LIST的处理方式
if ("LIST".equals(type.toString())) {
List<String> list = redisCacheTemplate.opsForList().range(key, 0, -1);
Iterator<String> it = list.iterator();
while (it.hasNext()) {
Object value = it.next();
RedisBean redisBean = new RedisBean();
redisBean.setValue(value);
redisBeanList.add(redisBean);
}
return JsonTools.objectToJson(redisBeanList);
}
// 类型为SET的处理方式
if ("SET".equals(type.toString())) {
Set<String> set = redisCacheTemplate.opsForSet().members(key);
Iterator<String> it = set.iterator();
while (it.hasNext()) {
Object value = it.next();
RedisBean redisBean = new RedisBean();
redisBean.setValue(value);
redisBeanList.add(redisBean);
}
return JsonTools.objectToJson(redisBeanList);
}
// 类型为ZSET的处理方式
if ("ZSET".equals(type.toString())) {
Cursor<ZSetOperations.TypedTuple<Object>> cursor = redisCacheTemplate.opsForZSet().scan(key, ScanOptions.NONE);
while (cursor.hasNext()) {
ZSetOperations.TypedTuple<Object> zSetOperations = cursor.next();
RedisBean redisBean = new RedisBean();
redisBean.setKey(zSetOperations.getScore());
redisBean.setValue(zSetOperations.getValue());
redisBeanList.add(redisBean);
}
return JsonTools.objectToJson(redisBeanList);
}
// 类型为String的处理方式
Object value = redisCacheTemplate.opsForValue().get(key);
return JsonTools.objectToJson(value);
}