spring中使用redistemplate操作redis

上传人:m**** 文档编号:55712758 上传时间:2018-10-04 格式:DOCX 页数:43 大小:46.59KB
返回 下载 相关 举报
spring中使用redistemplate操作redis_第1页
第1页 / 共43页
spring中使用redistemplate操作redis_第2页
第2页 / 共43页
spring中使用redistemplate操作redis_第3页
第3页 / 共43页
spring中使用redistemplate操作redis_第4页
第4页 / 共43页
spring中使用redistemplate操作redis_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《spring中使用redistemplate操作redis》由会员分享,可在线阅读,更多相关《spring中使用redistemplate操作redis(43页珍藏版)》请在金锄头文库上搜索。

1、springspring 中使用中使用 redistemplateredistemplate 操作操作 redisredisSpring 中使用 RedisTemplate 操作 Redis(spring-data-redis)Redis 数据结构简介Redis 可以存储键与 5 种不同数据结构类型之间的映射,这 5 种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。下面来对这 5 种数据结构类型作简单的介绍:结构类型 结构存储的值 结构的读写能力String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分

2、执行操作;对象和浮点数执行自增(increment)或者自减(decrement)List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素Hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对Zset 字符串成员(member)与浮点数

3、分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素Redis 5 种数据结构的概念大致介绍到这边,下面将结合 Spring 封装的RedisTemplate 来对这 5 种数据结构的运用进行演示RedisTemplate 介绍Spring 封装了 RedisTemplate 对象来进行对 Redis 的各种操作,它支持所有的 Redis原生的 api。RedisTemplate 位于 spring-data-redis 包下。RedisTemplate 在 Spring 代码中的结构如下:org.spring

4、framework.data.redis.coreClass RedisTemplatejava.lang.Objectorg.springframework.data.redis.core.RedisAccessororg.springframework.data.redis.core.RedisTemplateType Parameters:Kthe Redis key type against which the template works (usually a String)模板中的 Redis key 的类型(通常为 String)如:RedisTemplate注意:如果没特殊情况

5、,切勿定义成 RedisTemplate,否则根据里氏替换原则,使用的时候会造成类型错误 。Vthe Redis value type against which the template works模板中的 Redis value 的类型RedisTemplate 中定义了对 5 种数据结构操作redisTemplate.opsForValue();/操作字符串redisTemplate.opsForHash();/操作 hashredisTemplate.opsForList();/操作 listredisTemplate.opsForSet();/操作 setredisTemplate.

6、opsForZSet();/操作有序 setStringRedisTemplate 与 RedisTemplate两者的关系是 StringRedisTemplate 继承 RedisTemplate。两者的数据是不共通的;也就是说 StringRedisTemplate 只能管理StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。SDR 默认采用的序列化策略有两种,一种是 String 的序列化策略,一种是 JDK 的序列化策略。StringRedisTemplate 默认采用的是 String 的序列化策略,保存的

7、 key 和 value 都是采用此策略序列化保存的。RedisTemplate 默认采用的是 JDK 的序列化策略,保存的 key 和 value 都是采用此策略序列化保存的。RedisTemplate 配置如下:复制代码Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory)Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class)

8、;ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisTemplate template = new RedisTemplate();template.setConnectionFactory(redisCon

9、nectionFactory);template.setKeySerializer(jackson2JsonRedisSerializer);template.setValueSerializer(jackson2JsonRedisSerializer);template.setHashKeySerializer(jackson2JsonRedisSerializer);template.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;复制代码Re

10、dis 的 String 数据结构 (推荐使用 StringRedisTemplate)注意:如果使用 RedisTemplate 需要更改序列化方式RedisSerializer stringSerializer = new StringRedisSerializer();template.setKeySerializer(stringSerializer );template.setValueSerializer(stringSerializer );template.setHashKeySerializer(stringSerializer );template.setHashValue

11、Serializer(stringSerializer );public interface ValueOperationsRedis operations for simple (or in Redis terminology string) values.ValueOperations 可以对 String 数据结构进行操作:set void set(K key, V value);使用:redisTemplate.opsForValue().set(“name“,“tom“);结果:redisTemplate.opsForValue().get(“name“) 输出结果为 tomset

12、void set(K key, V value, long timeout, TimeUnit unit);使用:redisTemplate.opsForValue().set(“name“,“tom“,10, TimeUnit.SECONDS);结果:redisTemplate.opsForValue().get(“name“)由于设置的是 10 秒失效,十秒之内查询有结果,十秒之后返回为 nullset void set(K key, V value, long offset);该方法是用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开

13、始使用:template.opsForValue().set(“key“,“hello world“);template.opsForValue().set(“key“,“redis“, 6);System.out.println(“*“+template.opsForValue().get(“key“);结果:*hello redissetIfAbsent Boolean setIfAbsent(K key, V value);使用:System.out.println(template.opsForValue().setIfAbsent(“multi1“,“multi1“);/false

14、multi1 之前已经存在System.out.println(template.opsForValue().setIfAbsent(“multi111“,“multi111“);/true multi111 之前不存在结果:falsetruemultiSet void multiSet(Mapm);为多个键分别设置它们的值复制代码使用:Map maps = new HashMap();maps.put(“multi1“,“multi1“);maps.put(“multi2“,“multi2“);maps.put(“multi3“,“multi3“);template.opsForValue(

15、).multiSet(maps);List keys = new ArrayList();keys.add(“multi1“);keys.add(“multi2“);keys.add(“multi3“);System.out.println(template.opsForValue().multiGet(keys);结果:multi1, multi2, multi3复制代码multiSetIfAbsent Boolean multiSetIfAbsent(Mapm);为多个键分别设置它们的值,如果存在则返回 false,不存在返回 true复制代码使用:Map maps = new HashM

16、ap();maps.put(“multi11“,“multi11“);maps.put(“multi22“,“multi22“);maps.put(“multi33“,“multi33“);Map maps2 = new HashMap();maps2.put(“multi1“,“multi1“);maps2.put(“multi2“,“multi2“);maps2.put(“multi3“,“multi3“);System.out.println(template.opsForValue().multiSetIfAbsent(maps);System.out.println(template.opsForValue().multiSetIfAbsent(maps2);结果:truefalse复制代码get V get(Object key);使用:template.opsForValue().set(“key“,“hello world“);System.out.println(“*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 数据库

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号