RedisTemplate的使用说明(序列化以及事物)
2016-07-08 17:52
633 查看
SDR官方文档中对RedisTemplate的介绍:the template is in fact the central class of the Redis module due to its rich feature set. The template offers a high-level abstraction for Redis interactions.
通过RedisTemplate可以调用ValueOperations,ListOperations,SetOperations,ZSetOperations等方法,分别是对Redis命令的高级封装。
从代码可以看出,Spring提供了默认的StringSerializer和JdkSerializer。
StringSerializer就是通过String.getBytes()来实现的,而且在Redis中,所有存储的值都是字符串类型的。所以这种方法保存后,通过Redis-cli控制台,是可以清楚的查看到我们保存了什么key,value是什么。
JdkSerializationRedisSerializer,这个序列化方法是Idk提供的,要求要被序列化的类继承自Serializeable接口,然后通过Jdk对象序列化的方法保存,这个序列化保存的对象,即使是个String类型的,在redis控制台,也是看不出来的,因为它保存了一些对象的类型什么的额外信息。
所以在上篇文章中的Spring配置如下
keySerializer:这个是对key的默认序列化器。默认值是StringSerializer。
valueSerializer:这个是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashKeySerializer:对hash结构数据的hashkey序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashValueSerializer:对hash结构数据的hashvalue序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer
在RedisTemplate源码中搜索该变量,发现
也就是如果设置参数enableTransactionSupport=true,则系统自动帮我们拿到了事务中绑定的连接。可以在一个方法的多次对Redis增删该查中,始终使用同一个连接。
同样的,在Spring中@Transactional 应该也是可以进行事物控制的。
通过RedisTemplate可以调用ValueOperations,ListOperations,SetOperations,ZSetOperations等方法,分别是对Redis命令的高级封装。
RedisTemplate的序列化
以下是RedisTemplate的部分代码片段:if (defaultSerializer == null) { defaultSerializer = new JdkSerializationRedisSerializer(classLoader != null ? classLoader : this.getClass().getClassLoader()); }
从代码可以看出,Spring提供了默认的StringSerializer和JdkSerializer。
StringSerializer就是通过String.getBytes()来实现的,而且在Redis中,所有存储的值都是字符串类型的。所以这种方法保存后,通过Redis-cli控制台,是可以清楚的查看到我们保存了什么key,value是什么。
JdkSerializationRedisSerializer,这个序列化方法是Idk提供的,要求要被序列化的类继承自Serializeable接口,然后通过Jdk对象序列化的方法保存,这个序列化保存的对象,即使是个String类型的,在redis控制台,也是看不出来的,因为它保存了一些对象的类型什么的额外信息。
所以在上篇文章中的Spring配置如下
<!--对key的默认序列化器。默认值是StringSerializer--> <bean id="keySerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" /> <!--是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。--> <bean id="valueSerializer" class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
keySerializer:这个是对key的默认序列化器。默认值是StringSerializer。
valueSerializer:这个是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashKeySerializer:对hash结构数据的hashkey序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashValueSerializer:对hash结构数据的hashvalue序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer
RedisTemplate的事务
通过private boolean enableTransactionSupport = false;可以看出RedisTemplate是默认事物关闭的。
在RedisTemplate源码中搜索该变量,发现
if (enableTransactionSupport) { synchronization conn = RedisConnectionUtils.bindConnection(factory, enableTransactionSupport); } else { conn = RedisConnectionUtils.getConnection(factory); }
也就是如果设置参数enableTransactionSupport=true,则系统自动帮我们拿到了事务中绑定的连接。可以在一个方法的多次对Redis增删该查中,始终使用同一个连接。
同样的,在Spring中@Transactional 应该也是可以进行事物控制的。
相关文章推荐
- Linux下php安装Redis扩展
- Redis数据库实现
- redis通用配置
- spring-data-redis操作redis集群
- Spring Redis基本使用
- Redis清除缓存方法
- Redis常用技巧
- 【Redis】——Redis简单介绍及Redis安装详细过程
- redis事务管理
- Redis的HA搭建和主从复制搭建以及测试
- python实现redis客户端单例+hbase客户端单例 推荐
- redis存储和查询的java实现
- redis配置文件详解(转载)
- python redis使用
- Redis安装配置和介绍
- redis 缓存
- 用Redis存储Tomcat集群的Session
- redis储存中文,客服端读取出现乱码
- redis数据类型之set常用操作
- 一种openresty在init_by_lua_file阶段读取redis到共享内存的方法