Spring-Data-Redis之RedisTemplate的使用

来源:互联网 发布:万国数据员工工资高吗 编辑:程序博客网 时间:2024/05/19 15:42

功能介绍


        大部分的用户都喜欢用RedisTemplate,它相应的包是org.springframework.data.redis.core。该模板实际是Redis模块的核心类,因为它的功能丰富。模板为Redis交互提供了高级抽象。虽然RedisConnection提供接受和返回二进制值(字节数组)的低级方法,但该模板可以处理序列化和连接管理,使得用户不需要处理太多的细节。


        此外,模板提供了操作视图(按照Redis命令参考分组),它们提供了丰富的、现成的接口用于对特定类型或者特定键的操作(通过KeyBound接口),如下所述:


接口描述

Key类型操作

ValueOperations

操作Redis String(或者Value)类型数据

ListOperations

操作Redis List类型数据

SetOperations

操作Redis Set类型数据

ZSetOperations

操作Redis ZSet(或者Sorted Set)类型数据

HashOperations

操作Redis Hash类型数据

HyperLogLogOperations

操作Redis HyperLogLog类型数据,比如:pfadd,pfcount,...

GeoOperations

操作Redis Geospatial类型数据,比如:GEOADD,GEORADIUS,…​)

Key绑定操作

BoundValueOperations

Redis字符串(或值)键绑定操作

BoundListOperations

Redis列表键绑定操作

BoundSetOperations 

Redis Set键绑定操作

BoundZSetOperations

Redis ZSet(或Sorted Set)键绑定操作

BoundHashOperations

Redis Hash键绑定操作

BoundGeoOperations

Redis Geospatial 键绑定操作

        一旦经过配置,该模板就是线程安全的,它可以被多个实例重复使用。


        开箱即用,RedisTemplate使用了基于Java的串行器来进行大部分的操作。这就意味着,任何对象通过模板的读写都会通过Java来进行序列化/反序列化。该模板的序列化机制改变起来也很容易,并且Redis模块在org.springframework.data.redis.serializer包中提供了多种可用的实现,详情请参考Serializers。你也可以通过设置enableDefaultSerializer属性为false,将其他的序列化实现都设置成null,并将RedisTemplate和原生的字节数组一起使用。注意该模板的key不允许为null值,除非底层序列化程序可以接受。获取更多序列化器的信息,请阅读javadoc。


使用实例


        上面是官网上介绍的大概的功能,RedisTemplate提供了很多方法,详细具体的方法请参考官网:http://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html。以上篇博客中的实例为基础,下面代码介绍常用的各种操作。


[java] view plain copy
  1. public class RedisTemplateTest {  
  2.   
  3.     @SuppressWarnings("rawtypes")  
  4.     @Autowired  
  5.     private RedisTemplate redisTemplate;  
  6.   
  7.     @SuppressWarnings("unchecked")  
  8.     public void findAll() {  
  9.         // -----------------String类型数据操作 start--------------------  
  10.         ValueOperations<String, String> stringOperations = redisTemplate  
  11.                 .opsForValue();  
  12.         // String类型数据存储,不设置过期时间,永久性保存  
  13.         stringOperations.set("string1""fiala");  
  14.         // String类型数据存储,设置过期时间为80秒,采用TimeUnit控制时间单位  
  15.         stringOperations.set("string2""fiala"80, TimeUnit.SECONDS);  
  16.         // 判断key值是否存在,存在则不存储,不存在则存储  
  17.         stringOperations.setIfAbsent("string1""my fiala");  
  18.         stringOperations.setIfAbsent("string3""my fiala");  
  19.         String value1 = stringOperations.get("string1");  
  20.         String value2 = stringOperations.get("string3");  
  21.         System.out.println(value1);  
  22.         System.out.println(value2);  
  23.         // -----------------String类型数据操作 end--------------------  
  24.   
  25.         // -----------------其他值类型数据操作 start--------------------  
  26.         Demo demo = new Demo();  
  27.         demo.setId("1");  
  28.         demo.setName("fiala");  
  29.         List<Demo> demos = new ArrayList<Demo>();  
  30.         ValueOperations<String, Object> valueOperations = redisTemplate  
  31.                 .opsForValue();  
  32.         // 设置value为对象类型,且不设置过期时间,默认永久  
  33.         valueOperations.set("value1", demo);  
  34.         // 设置value为对象类型,设置过期时间为80秒,时间单位由TimeUnit控制  
  35.         valueOperations.set("value2", demos, 80, TimeUnit.SECONDS);  
  36.         Demo demo1 = (Demo) valueOperations.get("value1");  
  37.         System.out.println(demo1.toString());  
  38.         // -----------------其他值类型数据操作 end--------------------  
  39.   
  40.         // -----------------List数据类型操作 start------------------  
  41.         ListOperations<String, Object> listOperations = redisTemplate  
  42.                 .opsForList();  
  43.         for (int i = 0; i < 5; i++) {  
  44.             Demo listDemo = new Demo();  
  45.             listDemo.setId("\"" + i + "\"");  
  46.             listDemo.setName("fiala" + i);  
  47.             listOperations.leftPush("list1", listDemo);  
  48.             listOperations.rightPush("list2", listDemo);  
  49.         }  
  50.         // 可给数据排序  
  51.         Demo demo2 = (Demo) listOperations.leftPop("list1");  
  52.         Demo demo3 = (Demo) listOperations.rightPop("list2");  
  53.         System.out.println(demo2.toString());  
  54.         System.out.println(demo3.toString());  
  55.         // -----------------List数据类型操作 end------------------  
  56.   
  57.         // -----------------set数据类型操作 start------------------  
  58.         SetOperations<String, Object> setOperations = redisTemplate.opsForSet();  
  59.         for (int i = 0; i < 5; i++) {  
  60.             Demo setDemo = new Demo();  
  61.             setDemo.setId("\"" + i + "\"");  
  62.             setDemo.setName("fiala" + i);  
  63.             setOperations.add("set1", setDemo);  
  64.         }  
  65.         Demo demo4 = (Demo) setOperations.pop("set1");  
  66.         System.out.println(demo4.toString());  
  67.         // -----------------set数据类型操作 end------------------  
  68.   
  69.         // -----------------zset数据类型操作 start------------------  
  70.         ZSetOperations<String, Object> zSetOperations = redisTemplate  
  71.                 .opsForZSet();  
  72.         zSetOperations.add("zset""fiala"0);  
  73.         zSetOperations.add("zset""my fiala"1);  
  74.         System.out.println(zSetOperations.rangeByScore("zset"01));  
  75.         // -----------------zset数据类型操作 end------------------  
  76.   
  77.         // -----------------hash数据类型操作 start------------------  
  78.         HashOperations<String, Object, Object> hashOperations = redisTemplate  
  79.                 .opsForHash();  
  80.         Map<String, String> map = new HashMap<String, String>();  
  81.         map.put("map1""fiala1");  
  82.         map.put("map2""fiala2");  
  83.         hashOperations.putAll("hash", map);  
  84.         System.out.println(hashOperations.entries("hash"));  
  85.         // -----------------hash数据类型操作 start------------------  
  86.     }  
阅读全文
0 0