深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
来源:互联网 发布:十本法术工厂升级数据 编辑:程序博客网 时间:2024/05/19 22:26
原文:http://www.cnblogs.com/luochengqiuse/p/4640932.html
上一篇文章我们讲解了RedisTemplate的基本使用,通过RedisCallback来获得connection,然后去操作Redis。网上的教程,大部分也都是这样的操作。
这个类似于HibernateTemplate里面提供的executeWithNativeSession方法,是Java中的一种同步回调机制。在方法的前后,系统替我们打开关闭连接,设置事务等。
RedisTemplate api详解
1. RedisTemplate的事务
private boolean enableTransactionSupport = false; private boolean exposeConnection = false; private boolean initialized = false; private boolean enableDefaultSerializer = true; private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer(); private RedisSerializer keySerializer = null; private RedisSerializer valueSerializer = null; private RedisSerializer hashKeySerializer = null; private RedisSerializer hashValueSerializer = null; private RedisSerializer<String> stringSerializer = new StringRedisSerializer(); private ScriptExecutor<K> scriptExecutor; // cache singleton objects (where possible) private ValueOperations<K, V> valueOps; private ListOperations<K, V> listOps; private SetOperations<K, V> setOps; private ZSetOperations<K, V> zSetOps;
enableTransactionSupport:是否启用事务支持。我们在代码中搜索下用到这个变量的地方,会看到,在调用RedisCallback之前,有一行代码是如果启用事务支持,那么conn = RedisConnectionUtils.bindConnection(factory, enableTransactionSupport),也就是说,系统自动帮我们拿到了事务中绑定的连接。可以在一个方法的多次对Redis增删该查中,始终使用同一个连接。但是,即使使用了同样的连接,没有进行connection.multi()和connection.exec(),依然是无法启用事务的。
我没有仔细的查阅代码,但是可以知道的是,Spring已经对这个,给了我们一个更好的支持:@Transactional
在调用RedisTempalte中的execute()方法的地方,加入这个注解(是spring包下面提供的,不要引用成rt包下的注解),能让这个方法中的所有execute,自动加入multi()以及异常的回滚或者是正常运行时候的提交!
2. RedisTempalte的Serializer
用过jedis操作的都知道,所有connection的操作方法,都是传入字节数组。那么,将一个对象和字节相互转换,就需要通过序列化和反序列化。
模版方法中,Spring提供了默认的StringSerializer和JdkSerializer,第一个很简单,就是通过String.getBytes()来实现的。而且在Redis中,所有存储的值都是字符串类型的。所以这种方法保存后,通过Redis-cli控制台,是可以清楚的查看到我们保存了什么key,value是什么。但是对于JdkSerializationRedisSerializer来说,这个序列化方法就是Jdk提供的了。首先要求我们要被序列化的类继承自Serializeable接口,然后通过,然后通过Jdk对象序列化的方法保存。(注:这个序列化保存的对象,即使是个String类型的,在redis控制台,也是看不出来的,因为它保存了一些对象的类型什么的额外信息,)
这么一长串,其实就是一个int类型的123。
keySerializer:这个是对key的默认序列化器。默认值是StringSerializer。
valueSerializer:这个是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashKeySerializer:对hash结构数据的hashkey序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashValueSerializer:对hash结构数据的hashvalue序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
除此之外,我们在该类中,还发现了valueOps和hashOps等操作类,这是spring给我们提供的可以直接使用来操作Redis的类,非常方便。下一篇我们将讲解这些类。
- 深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
- 深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
- 深入理解Spring Redis的使用 (三)、使用RedisTemplate的操作类访问Redis
- 深入理解Spring Redis的使用 (三)、使用RedisTemplate的操作类访问Redis
- 深入理解Spring Redis的使用 (四)、RedisTemplate执行Redis脚本
- Spring-boot通过redisTemplate使用redis(无须手动序列化)
- 深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
- spring与redis整合,redisTemplate的使用
- Spring-Data-Redis之RedisTemplate的使用
- Spring Data Redis(RedisTemplate的使用)
- Spring-Data-Redis之RedisTemplate的使用
- Redis使用二、redis整合spring(redisTemplate工具类)
- Spring集成Redis使用RedisTemplate
- spring 整合 redis,以及spring的RedisTemplate如何使用
- Spring 整合Redis以及Spring的RedisTemplate如何使用
- spring 整合 redis,以及spring的RedisTemplate如何使用
- spring 整合 redis,以及spring的RedisTemplate如何使用
- spring 整合 redis,以及spring的RedisTemplate如何使用
- Lua知识点二
- git搭建免费私有库-码云
- linux运维-team链路聚合
- Oracle 分布式锁 kill 锁表进程
- unity3D 关于重新载入场景后Easytouch不能使用的问题
- 深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
- php笔记
- oracle 全文索引
- 2017-5-24实训的第十天!
- 4880: [Lydsy2017年5月月赛]排名的战争
- MySQL主从复制
- 挑战程序竞赛系列(8):2.1一往直前!贪心法(其他)
- js中的3种弹出式消息提醒(警告窗口,确认窗口,信息输入窗口)的命令是什么?
- Oracle查询语句简单回顾(三)