来源:http://doc.redisfans.com/
redis内置5种数据结构,spring-data-redis 分别提供了针对5种不同数据结构进行操作的操作类,以下为相应类型的操作方式示例。
1)string类型(key:value)
BoundValueOperations<String, Object> operation = redisTemplate.boundValueOps(key);
operation.set(value); //将值 value 关联到 key 。
operation.set(value, 1000l, TimeUnit.MILLISECONDS); //将值 value 关联到 key,并设置key的过期时间为1000毫秒
operation.get(); //返回 key 所关联的值value。
2)Hash类型(key field:value),key理解为hash表的名字
BoundHashOperations<String, String, Object> operation = redisTemplate.boundHashOps(key);
operation.put(field, value); //将哈希表 key 中的域 field 的值设为 value
operation.get(field) //返回哈希表 key 中给定域 field 的值。
3)List 类型(key 理解为list的名字)
BoundListOperations<String, Object> operation=redisTemplate.boundListOps(key);
operation.leftPush(value) //将值 value 插入到列表 key 的表头
operation.rightPop() //移除并返回列表 key 的尾元素。
List<Object> list=operation.range(0, -1); //返回列表 key 中指定区间内的元素
4)Set 类型(key理解为集合的名字)
BoundSetOperations<String, Object> operation=redisTemplate.boundSetOps(key);
operation.add(Object...values); //将一个或多个元素加入到集合 key 当中
Set<Object> set=operation.members(); //返回集合中的所有成员
operation.remove(Object...values); //移除集合中一个或多个元素
5)ZSet 类型(有序集合)
BoundZSetOperations<String, Object> operation=redisTemplate.boundZSetOps(key);
operation.add(value, score); //将value元素及其对应的score 值加入到有序集 key 当中。
operation.incrementScore(value, delta); // 为有序集 key的成员 value 的 score 值加上增量 increment 。
operation.range(0, -1); // 返回有序集 key 中,指定区间内的成员,其中成员的位置按 score 值递增(从小到大)来排序。
其他对key的操作示例:
redisTemplate.hasKey(key) //判断key是否存在
redisTemplate.delete(key) //删除指定的key
spring-data-redis 本身提供了不同的序列化方式可供配置,包含Jdk序列化,Jackson等。
为方便排查问题,key 和hashKey的序列化方式统一规范为StringRedisSerializer
示例1:(key和hashkey采用StringRedisSerializer进行序列化,value和hashValue采用jdk序列化)
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<property name="keySerializer" ref="stringRedisSerializer"/>
<property name="hashKeySerializer" ref="stringRedisSerializer"/>
<property name="valueSerializer" ref="jdkSerializationRedisSerializer"/>
<property name="hashValueSerializer" ref="jdkSerializationRedisSerializer"/>
</bean>
考虑到jdk序列化方式性能低下问题,在spring-data-redis原有的序列化支持基础上扩展出FastJson 和Kryo序列化两种方式,可根据需要自行选择。推荐使用Kryo
使用:1.引入jar包
<dependency>
<groupId>com.weidai.redis</groupId>
<artifactId>redis</artifactId>
<version>1.0</version>
</dependency>
2.使用Kryo进行序列化配置示例:
<bean id="kryoSerializer" class="com.weidai.redis.serialize.KryoSerializer" />
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<property name="keySerializer" ref="stringRedisSerializer"/>
<property name="hashKeySerializer" ref="stringRedisSerializer"/>
<property name="valueSerializer" ref="kryoSerializer"/>
<property name="hashValueSerializer" ref="kryoSerializer"/>
</bean>
使用FastJson进行序列化配置示例:
<bean id="fastJsonSerializer" class="com.weidai.redis.serialize.FastJsonSerializer" />
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<property name="keySerializer" ref="stringRedisSerializer"/>
<property name="hashKeySerializer" ref="stringRedisSerializer"/>
<property name="valueSerializer" ref="fastJsonSerializer"/>
<property name="hashValueSerializer" ref="fastJsonSerializer"/>
</bean>