全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

spring使用RedisTemplate的操作类访问Redis

事务需要开启enableTransactionSupport,然后使用@transactional注解,里面直接通过回调的connection,就不需要自己进行multi和exec的事务开启提交了。但是通过回调去获取connection,完全没有达到一个模版类的功能。所以这篇我们会讲下几种Operations接口提供的方法。

  private ValueOperations<K, V> valueOps;
  private ListOperations<K, V> listOps;
  private SetOperations<K, V> setOps;
  private ZSetOperations<K, V> zSetOps;

1. RedisOperations接口说明

这个接口的实现类就是RedisTemplate本身,主要提供了一些对Redis键,事务,运行脚本等命令的支持,不负责数据的读写。
我们选一段代码看下:

  public void watch(K key) {
    final byte[] rawKey = rawKey(key);

    execute(new RedisCallback<Object>() {

      public Object doInRedis(RedisConnection connection) {
        connection.watch(rawKey);
        return null;
      }
    }, true);
  }

这个是事务的监视命令,可以看出,里面的实现也是用的回调RedisCallback。这些api都是通过connection的api来进行了封装。 

2. ValueOperations接口说明

这个接口的实现类为DefaultValueOperations,default这个类同时继承AbstractOperation,我们来看下这个类的构造函数:

  DefaultValueOperations(RedisTemplate<K, V> template) {
    super(template);
  }

非公开的,需要传入template来构造。但是我们是无法访问的。不过不要急,在RedisTemplate中,已经提供了一个工厂方法:opsForValue()。这个方法会返回一个默认的操作类。另外,我们可以直接通过注解@Resource(name = "redisTemplate")来进行注入。

  @Resource(name = "redisTemplate")
  private ValueOperations<String, Object> vOps;

是不是很奇怪,毫无父子兄弟关系的两个类,怎么能互相注入呢?这个是Spring的Editor机制,搜索下ValueOperationsEditor这个类就知道了,Spring在注入的时候调用了Editor的setValue方法。了解Spring源码的应该知道。我也是看别人的文章才理解的。

其实除了可以通过template注入ValueOperations,还可以注入 上面的其他几种operations以及HashOperations.
DefaultValueOperations提供了所有Redis字符串类型的操作api。比如set,get,incr等等。使用这些方法,可以方便的直接存储任意的java类型,而不需要自己去将存储的东西序列化以及反序列化。

注意:泛型的类型,以及序列化器都是来自RedisTemplate。如果要自行进行json或者其他的序列化,就需要在RedisTemplate中进行更改。

另外,对于成员listOps,setOps,zSetOps这接个操作类,就不再赘述,原理同ValueOperations,是其他几种数据类型的实现。

3. HashOperations接口说明

这个接口并没有定义成员变量,猜测是因为对于Hash来说,又增加了额外的Key和Value,泛型无法在成员前额外定义,所以直接提供了方法。不过所幸里面用的是JdkSerializer,所以这个定义了什么类型的泛型都不会产生运行异常。

  public void put(K key, HK hashKey, HV value) {
    final byte[] rawKey = rawKey(key);
    final byte[] rawHashKey = rawHashKey(hashKey);
    final byte[] rawHashValue = rawHashValue(value);

    execute(new RedisCallback<Object>() {

      public Object doInRedis(RedisConnection connection) {
        connection.hSet(rawKey, rawHashKey, rawHashValue);
        return null;
      }
    }, true);
  }

这个是基本的put方法,可以看出key和hashkey这两个,调用了不同的序列化方法。进行方法查看,看到序列化hashkey用的是template里的hashkeyserializer,默认是jdkserializer,这个会导致在redis控制台,看不出来存了什么key。如果不喜欢,可以通过redistemplate.sethashkeyserializer()来进行设置。

对于hash结构所有的api,也都在这个类里进行了封装,比如hset变为了put,hget变为get。需要自行去查看api。不要被误导。

4. 总结

到这里为止,已经把基本的使用都说完了。说的很粗糙,只是把我觉得容易出现误解的点进行了重点说明,基础的操作还需要大家自己稍微看下。权作一个抛砖引玉的作用吧。接下来,可能会总结下在这两个月用Redis遇到的一些问题进行说明。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# redis  # redistemplate  # spring访问redis  # spring  # 使用@Autowired 注入RedisTemplate报错的问题及解决  # Redis官方ORM框架比RedisTemplate更优雅  # 浅谈RedisTemplate和StringRedisTemplate的区别  # Spring RedisTemplate 批量获取值的2种方式小结  # 使用redisTemplate从redis获取所有数据  # Java使用RedisTemplate如何根据前缀获取key列表  # RedisTemplate访问Redis的更好方法  # 序列化  # 几种  # 的是  # 都是  # 回调  # 进行了  # 可以通过  # 可以看出  # 是因为  # 在这个  # 还可以  # 在这  # 就不  # 把我  # 不喜欢  # 其他的  # 抛砖引玉  # 而不  # 这两个  # 也都 


相关文章: 建站主机选择指南:服务器配置与SEO优化实战技巧  太原网站制作公司有哪些,网约车营运证查询官网?  常州企业建站如何选择最佳模板?  网站制作壁纸教程视频,电脑壁纸网站?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  建设网站制作价格,怎样建立自己的公司网站?  网站制作公司,橙子建站是合法的吗?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何选择适配移动端的WAP自助建站平台?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  如何基于PHP生成高效IDC网络公司建站源码?  如何在Golang中使用replace替换模块_指定本地或远程路径  如何在腾讯云服务器上快速搭建个人网站?  建站之星各版本价格是多少?  如何通过西部数码建站助手快速创建专业网站?  如何在阿里云部署织梦网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  PHP 500报错的快速解决方法  建站之星如何快速解决建站难题?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何通过免费商城建站系统源码自定义网站主题与功能?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  建站之星如何保障用户数据免受黑客入侵?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Android自定义控件实现温度旋转按钮效果  Android自定义listview布局实现上拉加载下拉刷新功能  如何用免费手机建站系统零基础打造专业网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  制作网站外包平台,自动化接单网站有哪些?  如何快速搭建高效简练网站?  如何在万网自助建站中设置域名及备案?  建站之星后台密码遗忘?如何快速找回?  如何做静态网页,sublimetext3.0制作静态网页?  如何配置支付宝与微信支付功能?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何用IIS7快速搭建并优化网站站点?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  h5在线制作网站电脑版下载,h5网页制作软件?  简单实现Android验证码  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  官网网站制作腾讯审核要多久,联想路由器newifi官网  网站制作员失业,怎样查看自己网站的注册者?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  寿县云建站:智能SEO优化与多行业模板快速上线指南  建站上传速度慢?如何优化加速网站加载效率?  高端建站三要素:定制模板、企业官网与响应式设计优化 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。