SpringBoot RedisTemplate

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

实战操作

# 配置RedisConfig

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;

# 特殊注入方式
# 在项目中出现多个Bean时需要这样注入具体原因还没弄明白
@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);
    }
}

# 根据Key获取Value,因Redis中存储的类型每个都不一样所以需要特殊处理

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);
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin-Pig

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值