这两个类StringRedisTemplate和RedisTemplate,这两个类是springboot-data-redis对Redis进行操作的实现类。

RedisTemplate是泛型类,而在StringRedisTemplate继承RedisTemplate类时,则是指定了泛型的类型,两个String。

这就直接导致了,StringRedisTemplate只能处理String-String的键值对数据,而RedisTemplate则可以处理任何类型的键值对。


spring-data-redis提供如下几种选择:
GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的
JacksonJsonRedisSerializer: 序列化object对象为json字符串
JdkSerializationRedisSerializer: 序列化java对象
StringRedisSerializer: 简单的字符串序列化

使用RedisTemplate需要更改序列化方式:

RedisSerializer stringSerializer = new StringRedisSerializer();

template.setKeySerializer(stringSerializer );

template.setValueSerializer(stringSerializer );

template.setHashKeySerializer(stringSerializer );

template.setHashValueSerializer(stringSerializer );


RedisTemplate和StringRedisTemplate的区别:

1. 两者的关系是StringRedisTemplate继承RedisTemplate。

2. 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

3. SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存入Redis数据库,这个时候打开Redis查看的时候,你会看到你的数据不是以可读的形式展现的,而是以字节数组显示,类似下面

当然从Redis获取数据的时候也会默认将数据当做字节数组转化,这样就会导致一个问题,当需要获取的数据不是以字节数组存在redis当中而是正常的可读的字符串的时候,比如说下面这种形式的数据

RedisTemplate就无法获取导数据,这个时候获取到的值就是NULL。这个时候StringRedisTempate就派上了用场。

当Redis当中的数据值是以可读的形式显示出来的时候,只能使用StringRedisTemplate才能获取到里面的数据。

使用时注意事项:
(1)当你的Redis数据库里面本来存的是字符串数据或者是你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可;
(2)但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择;
(3)RedisTemplate中存取数据都是字节数组。当Redis职工存入的数据是可读形式而非字节数组时,使用RedisTemplate取值的时候会无法获取导出数据,获得的值为null。可以使用StringRedisTemplate试试;


RedisTemplate常用方法:

redisTemplate有两个方法经常用到,一个是opsForXXX一个是boundXXXOps,XXX是value的类型,前者获取到一个Opercation,但是没有指定操作的key,可以在一个连接(事务)内操作多个key以及对应的value;后者会获取到一个指定了key的operation,在一个连接内只操作这个key对应的value。

RedisTemplate定义了5种数据结构操作:

redisTemplate.opsForValue(); //操作字符串

redisTemplate.opsForHash(); //操作hash

redisTemplate.opsForList(); //操作list

redisTemplate.opsForSet(); //操作set

redisTemplate.opsForZSet(); //操作有序set

redis中的数据类型:键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。


注意:

ValueOperation和BoundValueOperation的区别:

ValueOperations valueOperations = redisTemplate.opsForValue();

BoundValueOperations boundValueOps = redisTemplate.boundValueOps("key");


StringRedisTemplate常用操作:

stringRedisTemplate.opsForValue().set("user", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间  stringRedisTemplate.boundValueOps("user").increment(-1);//val做-1操作stringRedisTemplate.opsForValue().get("user")//根据key获取缓存中的valstringRedisTemplate.boundValueOps("user").increment(1);//val +1stringRedisTemplate.getExpire("user")//根据key获取过期时间stringRedisTemplate.getExpire("user",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位 stringRedisTemplate.delete("user");//根据key删除缓存stringRedisTemplate.hasKey("134");//检查key是否存在,返回boolean值 stringRedisTemplate.opsForSet().add("red", "black","blue","we");//向指定key中存放set集合stringRedisTemplate.expire("red",1000 , TimeUnit.MILLISECONDS);//设置过期时间stringRedisTemplate.opsForSet().isMember("red", "1")//根据key查看集合中是否存在指定数据stringRedisTemplate.opsForSet().members("red");//根据key获取set集合

案例

   @Autowired    private StringRedisTemplate stringRedisTemplate;    @Test    public void testRedis() throws Exception {        stringRedisTemplate.opsForValue().set("key", "value");        System.out.println(stringRedisTemplate.opsForValue().get("key"));    }

可以下载Redis可视化工具RedisDesktopManager查看数据


以上就是redisTemplate的使用以及和stringRedisTempalte的区别

记录学习,每天进步一点点的橘子大王。

喜欢就关注我吧。

redistemplate hash 过期时间_redisTemplate的使用以及和stringRedisTemplate的区别相关推荐

  1. redistemplate hash 过期时间_完美!谈谈Java中时间控制的几种解决方案

    前言 需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失效.后台有定时任务在获取,但是偶尔会出现token失效,这是因为在获取的时候,定时任务正在跑,可 ...

  2. redistemplate hash 过期时间_Redis开发 —— 过期消息通知实现(Springboot)

    实际在我们开发过程中,有一些业务场景需要能够在一段时间之后能自动变更数据状态,如优惠券,特价商品,购物车等,这个时候如果实现基于redis,就可以使用下面的方案. 一,在系统添加配置类 import ...

  3. redistemplate hash 过期时间_Redis过期监听——订单超时-取消

    最近在做电商项目,涉及支付超时处理的几种方式.[记录哈使用redis监听处理] 提交订单的时候,支付-超过了有效时间则支付状态自动更新为已取消. 欢迎交流 redis过期监听的实现: 1.修改redi ...

  4. RedisTemplate设置过期时间

    //向redis里存入数据和设置缓存时间 stringRedisTemplate.opsForValue().set("baike", "100", 60 * ...

  5. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间

    相信大家在很多业务场景都会遇到对数据设置过期时间,如安全认证token.短信验证码等.一般我们的解决有几种:存redis.存数据库.实时计算(如JWT),不管使用哪种方式,需求就是过期了对数据的清理. ...

  6. 如何通过redisTemplate获得key的过期时间

    /** 从redis中获取key对应的过期时间; 如果该值有过期时间,就返回相应的过期时间; 如果该值没有设置过期时间,就返回-1; 如果没有该值,就返回-2; */ public Long getE ...

  7. redis hash结构如何设置过期时间

    Redis中有个设置时间过期的功能,即通过setex或者expire实现,目前redis没有提供hsetex()这样的方法,redis中过期时间只针对顶级key类型,对于hash类型是不支持的,这个时 ...

  8. redisTemplate获得key的过期时间方法

    /** * 从redis中获取key对应的过期时间; * 如果该值有过期时间,就返回相应的过期时间; * 如果该值没有设置过期时间,就返回-1; * 如果没有该值,就返回-2; */ redisTem ...

  9. RedisTemplate存数据时指定过期时间

    redisTemplate.opsForValue().set("2","张无忌",2, TimeUnit.SECONDS);//过期时间2秒 redisTem ...

最新文章

  1. 正则表达式——全部符号解释(详解)
  2. smartform四联纸跳页问题
  3. el-date-picker怎样获取选择的时间范围值并判断是否大于7天
  4. sql已经完成,生成表
  5. 95cloud云主机管理系统 使用手册 图片去网站看吧
  6. mysql8.0提示命令_Mysql 8.0 相关命令
  7. Spring学习笔记十二---泛型依赖注入
  8. 计算机博士英语复试题目,博士复试自我介绍中英文双语解读
  9. log4net日志文件的应用
  10. Java Servlet response
  11. Python求数独的补充
  12. 易语言怎么给手机发短信
  13. 评价模型——数据包络分析
  14. 三极管输出和输入特性曲线人类语言(共射为例)
  15. 深度学习笔记(19) 多任务学习
  16. 双重for循环 语法结构
  17. Flink CEP greedy理解
  18. iOS开发 处理置顶聊天的功能
  19. 校招详解(术语、时间、流程)
  20. 手机号与邮箱正则表达式

热门文章

  1. UI素材|屏幕移动线框套件
  2. oracle大作业_最累人7大专业
  3. beast php,windows php-beast 安装
  4. python递归创建目录_Python学习第172课——Linux中一次性创建多层目录以及递归列出所有子目录...
  5. C++ 虚函数,纯虚函数,抽象类整理
  6. Python多线程好文
  7. 详解数据中心灾备切换技术
  8. C/C++搞不懂指针还是数组?用sizeof解释struct大小!
  9. python之字符串操作
  10. linux mysql 编码修改吗_Linux下mysql 修改编码