StringRedisTemplate与RedisTemplate区别点

  • 两者的关系是StringRedisTemplate继承RedisTemplate。

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

  • 其实他们两者之间的区别主要在于他们使用的序列化类:

    RedisTemplate使用的是JdkSerializationRedisSerializer    存入数据会将数据先序列化成字节数组然后在存入Redis数据库。

      StringRedisTemplate使用的是StringRedisSerializer

  • 使用时注意事项:
   当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。
   但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
  • RedisTemplate使用时常见问题:

    redisTemplate 中存取数据都是字节数组。当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会无法获取导出数据,获得的值为null。可以使用 StringRedisTemplate 试试。

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

  1. redisTemplate.opsForValue();  //操作字符串
  2. redisTemplate.opsForHash();   //操作hash
  3. redisTemplate.opsForList();   //操作list
  4. redisTemplate.opsForSet();   //操作set
  5. redisTemplate.opsForZSet();   //操作有序set

StringRedisTemplate常用操作

  1. stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
  2.  
  3. stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
  4.  
  5. stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
  6.  
  7. stringRedisTemplate.boundValueOps("test").increment(1);//val +1
  8.  
  9. stringRedisTemplate.getExpire("test")//根据key获取过期时间
  10.  
  11. stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位
  12.  
  13. stringRedisTemplate.delete("test");//根据key删除缓存
  14.  
  15. stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值
  16.  
  17. stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
  18.  
  19. stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
  20.  
  21. stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
  22.  
  23. stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合

StringRedisTemplate的使用 

springboot中使用注解@Autowired 即可

  1. @Autowired
  2. public StringRedisTemplate stringRedisTemplate;

使用样例:

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserResource {
  4. private static final Logger log = LoggerFactory.getLogger(UserResource.class);
  5. @Autowired
  6. private UserService userService;
  7.  
  8. @Autowired
  9. public StringRedisTemplate stringRedisTemplate;
  10.  
  11. @RequestMapping("/num")
  12. public String countNum() {
  13. String userNum = stringRedisTemplate.opsForValue().get("userNum");
  14. if(StringUtils.isNull(userNum)){
  15. stringRedisTemplate.opsForValue().set("userNum", userService.countNum().toString());
  16. }
  17. return userNum;
  18. }
  19. }

StringRedisTemplate操作redis数据的更多相关文章

  1. StringRedisTemplate操作Redis

    在说到StringRedisTemplate操作Redis数据的时候,我们顺便谈谈StringRedisTemplate和RedisTemplate的区别. 一.StringRedisTemplate ...

  2. python 操作redis数据

    python 操作redis 各种类型的数据 # encoding:utf-8 import redis import time def main(): """ redi ...

  3. python操作redis数据

    一.环境安装 1.redispy安装 (automatic) C:\Users\Administrator>pip install redis 2.检测是否安装成功 (automatic) C: ...

  4. Java操作Redis数据

    Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品.它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),列表(list) ...

  5. 直接在安装了redis的Linux机器上操作redis数据存储类型--对Sorted-Sets操作

    一.概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中.它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score ...

  6. 直接在安装了redis的Linux机器上操作redis数据存储类型--对key的操作

    一.概述:   前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点,即所有的操作都是针对与Key关 ...

  7. 直接在安装了redis的Linux机器上操作redis数据存储类型--set类型

    一.概述:   在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复 ...

  8. 直接在安装了redis的Linux机器上操作redis数据存储类型--hash类型

    一.概述:   我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和 ...

  9. 直接在安装了redis的Linux机器上操作redis数据存储类型--List类型

    一.概述: 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,Redis ...

随机推荐

  1. url字符长度限制解决办法

    前段时间,同事往系统上传相关文档,发现输入失败,找到了我了. 开始以为数据库字段属性问题,修改后未解决随调试系统,发现没有走到后台程序,发现 ajax没有传值,各种测试问题情况,后来同事发现是url字 ...

  2. MySQL学习(五) UNION与UNION ALL

    UNION用于把来自许多SELECT语句的结果组合到一个结果集合中,也叫联合查询. SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | ...

  3. JAVA对Excel的导入导出

    今天需要对比2个excel表的内容找出相同:由于要学的还很多上手很慢所以在这做个分享希望对初学的有帮助: 先是pom的配置: <dependency> <groupId>org ...

  4. UserControl VS TemplatedControl

    一:首先来看一下UserControl 熟悉XAML的朋友们都知道,当我们创建一个用户控件的时候,VS会自动为我们生成一个XXX.xaml文件和XXX..xaml.cs文件,XAML文件用于进行控件的 ...

  5. APP接口做什么?

    提交数据:GET POST 有的接口是获取数据和提交数据相结合形式:如检测更新下载

  6. tortoisegit安装

    1.下载tortoisegit:https://tortoisegit.org/download/ 2.下载git 64位 3. 双击开始安装,选择默认,点击下一步 4.接着是选择安装目录,可以保持默 ...

  7. 2018-01-15 Antlr4: 修改语法规则更接近普通BNF格式

    经 @沈默 在上文Antlr4添加中文变量赋求值,括号,各种问题评论中指出, 语法规则描述依赖于Antlr4生成的语法分析器的默认分析方法, 比如运算符的左联系, 以及优先级处理等等. 于是将语法修改 ...

  8. Git应用—03分支管理和冲突解决(转载)

    Git 分支管理和冲突解决 https://www.cnblogs.com/mengdd/p/3585038.html 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. ...

  9. android开发笔记:Handler、Looper、MessageQueen、Message的关系

    一.什么是handler? 注:线程分为主线程(主线程又叫UI线程,只能有一个主线程)和子线程(可以有多个)Handler只能在主线程里运行 handler是Android给我们提供用来更新UI的一套 ...

  10. (后台)Java:对double值进行四舍五入,保留两位小数的几种方法

    mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double ...