关于spring redis框架的使用,网上的例子很多很多。但是在自己最近一段时间的使用中,发现这些教程都是入门教程,包括很多的使用方法,与spring redis丰富的api大相径庭,真是浪费了这么优秀的一个框架。这里,我们就对比之前对spring orm中对hibernate的使用,来理解使用spring redis的使用。(本文章不做redis基本命令使用的讲解)

1. Redis使用场景

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

我们都知道,在日常的应用中,数据库瓶颈是最容易出现的。数据量太大和频繁的查询,由于磁盘IO性能的局限性,导致项目的性能越来越低。

这时候,基于内存的缓存框架,就能解决我们很多问题。例如Memcache,Redis等。将一些频繁使用的数据放入缓存读取,大大降低了数据库的负担。提升了系统的性能。

其实,对于hibernate的二级缓存,是同样的道理。利用内存高速的读写速度,来解决硬盘的瓶颈。

2. 配置使用redis

首先,我们需要引入基本的jar包。maven中的基本引用如下:

    <dependency><groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.4.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.2</version> </dependency> 

然后,在applicationContext中配置如下:

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxTotal" value="${redis.maxActive}" /> <property name="maxWaitMillis" value="${redis.maxWait}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> </bean> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig" /> <bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/> <!-- 开启事务,可以通过transcational注解控制 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="connectionFactory" /> <property name="keySerializer" ref="stringSerializer" /> <property name="enableTransactionSupport" value="true" /> </bean>

对于hibernate的配置可知,第一个poolconfig是对连接池的配置。包括最大连接数,队列数,存活时间,最大等待时间等等,还有一些额外的配置,请直接点击JedisPoolConfig类源码,进行查看。

这些配置的意思如果不明白的话,一定要去把线程池好好学习下。

第一个配置是连接工厂,顾名思义,最基本的使用一定是对连接的打开和关闭。我们需要为其配置redis服务器的账户密码,端口号。(这里还可以配置数据库的index,但是我使用时候一直使用redis的默认数据库,也就是第0个)

最后一个配置特别重要。这个类似于spring提供的HibernateDaoSupport。

接下来,全部讲解都将围绕这个类展开。

3. RedisTemplate的使用

这个类作为一个模版类,提供了很多快速使用redis的api,而不需要自己来维护连接,事务。

最初的时候,我创建的BaseRedisDao是继承自这个类的。继承的好处是我的每个Dao中,都可以自由的控制序列化器,自由的控制自己是否需要事务,这个先不需要了解,跟着我目前的这种配置方法来即可。

template提供了一系列的operation,比如valueOperation,HashOperation,ListOperation,SetOperation等,用来操作不同数据类型的Redis。

并且,RedisTemplate还提供了对应的*OperationsEditor,用来通过RedisTemplate直接注入对应的Operation。我们暂时不讲这个。

对于下面的test1方法,我们暂时不用考虑,先了解通过RedisTemplate来使用connection操作Redis。

Test代码如下:

package cn.test.spjedis;import javax.annotation.Resource;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.cn.redis2.dao.IncrDao; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class TestRedis { @Resource(name = "redisTemplate") private RedisTemplate<String, String> template; // inject the template as ListOperations //至于这个为什么可以注入。需要参考AbstractBeanFactory doGetBean //super.setValue(((RedisOperations) value).opsForValue());就这一行代码 依靠一个editor @Resource(name = "redisTemplate") private ValueOperations<String, Object> vOps; public void testSet(){ template.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { byte [] key = "tempkey".getBytes(); byte[] value = "tempvalue".getBytes(); connection.set(key, value); return true; } }); } public void testSet1(){ vOps.set("tempkey", "tempvalue"); } @Autowired private IncrDao incr; @Test public void addLink() { System.out.println(incr.incr(13)); System.out.println(incr.get(13)); } }

这个是对String类型插入的两个测试。test方法中,使用了模版类提交回调(RedisCallBack)的方法来使用jedis connection操作数据。这一部分,有没有似曾相识呢?

HibernateTemplate的HibernateCallback,以及Hibernate Session类中的doWork以及doReturningWork方法,都是使用了这样的机制,方便对于连接或者session的统一管理。

public int excuteHqlUpdate(final String hql,final Object ...params){return getHibernateTemplate().executeWithNativeSession(new HibernateCallback<Integer>() { @Override @SuppressWarnings("unchecked") public Integer doInHibernate(Session session) throws HibernateException { Query queryObject = session.createQuery(hql); if (params != null) { for (int i = 0; i < params.length; i++) { queryObject.setParameter(i, params[i]); } } return queryObject.executeUpdate(); } }); }

4. 总结

我们这节,讲了spring redis的配置使用,基本特性,以及引入使用RedisTemplate。通过之前HibernateTemplate的对比,也应该对 RedisTemplate的基本设计有了一定的了解。下节,我们将进行深入学习RedisTempalte。

本文原文,以及相关系列文章请查看:深入理解Spring Redis的使用 (一)、Spring Redis基本使用 以及相关链接

转载于:https://www.cnblogs.com/langtianya/p/5190201.html

深入理解Spring Redis的使用 (一)、Spring Redis基本使用相关推荐

  1. spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)

    上一篇:spring boot 1.5.4 整合webService(十五) 1      Spring Boot整合redis和缓存 Spring Boot中除了对常用的关系型数据库提供了优秀的自动 ...

  2. Spring boot的基础总结(三)-------Redis

    上回讲到了基本校验和统一参数返回. 是不是以为我这章要记录mybatis啊?~ 不好意思,这章记录redis. 因为现在数据库那部分不是我做的,哈哈哈~ 言回正传. 5.Redis 5.1 Redis ...

  3. 重磅 ! Redis+Nginx+JVM+设计模式+Spring全家桶+Dubbo

    前言 本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果. 本来想将文件上传到github上 ...

  4. Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster

    文章目录 Pre Jedis操作Redis Cluster 添加依赖 Code Spring Boot 操作Redis Cluster 引入 依赖 application.yml Code Pre R ...

  5. Redis+Nginx+JVM+设计模式+Spring全家桶+Dubbo万字总结

    前言 本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果. 本来想将文件上传到github上 ...

  6. spring集成redis(ehcache缓存改成redis)

    1.先准备要需要的四个和redis相关的jar包 commons-pool2-2.4.2.jar.jedis-2.9.0.jar.spring-data-redis-1.8.16.RELEASE.ja ...

  7. redis-4.0.10集群安装(3台机器,6个node),以及在Spring项目中的集成,redis操作工具类

    1 Redis安装 redis高可用的三种常见的集群方式:redis sentinel .redis cluster(多主机+分布式).redis sharding.接下来主要介绍redis sent ...

  8. Spring Boot 2 实战:利用Redis的Geo功能实现查找附近的位置

    1. 前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点.明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了.赶紧去查相关的技术选型.经过一番折腾,终于在晚上十点完成了这个需求. ...

  9. spring boot 缓存_Spring Boot 集成 Redis 实现数据缓存

    Spring Boot 集成 Redis 实现数据缓存,只要添加一些注解方法,就可以动态的去操作缓存了,减少代码的操作. 在这个例子中我使用的是 Redis,其实缓存类型还有很多,例如 Ecache. ...

  10. redis spring 切面缓存_今日份学习: Spring中使用AOP并实现redis缓存?

    笔记 在Spring中如何使用AOP? Spring是如何切换JDK动态代理和CGLIB的? spring.aop.proxy-target-class=true (在下方第二个链接中,原生doc中提 ...

最新文章

  1. 页面GBK,用jquery.post乱码问题
  2. 设置参数cocos2d-x 2.x 进度条CCProgressTimer
  3. javascript:void(0)与#区别
  4. CONVT_NO_NUMBER
  5. CentOS 8 成为绝版!到底发生了什么?
  6. R语言基础入门(4)之数据类型与相应运算2
  7. 渗透测试入门25之一次完整的渗透测试实验
  8. MySQL关键字constra_mysql总结笔记(一)
  9. php实参和形参不一致的情况
  10. python实现时频谱,语谱图,mel语谱倒谱等
  11. java 反解析cron_Cron表达式解析
  12. PostgreSQL string_to_array函数应用
  13. iphonex屏幕尺寸html,iphonex的尺寸是多大 iphonexs长宽高介绍
  14. html5 图形 标签,HTML5 canvas 标签介绍:定义图形
  15. 平均年薪23万!为什么却很少见程序员炫富?
  16. 自学前端第一天:认识前端工程与网页
  17. 雄关漫道真如铁,而今迈步从头越(嗨翻C语言)8.6
  18. Boosting分类器
  19. Spark入门(三)——SparkRDD剖析(面试点)
  20. 有道打赏视频/支付已对接/自带资源

热门文章

  1. C#宿舍管理系统命名规范与评分标注
  2. 如何使用Dirsearch探测Web目录
  3. 使用labelme制作自己的深度学习图像分割数据集
  4. 【solr专题之四】在Tomcat 中部署Solr4.x
  5. The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
  6. 解决eclipse中git插件中的cannot open git-upload-pack问题
  7. Scala学习之特殊符号,及函数
  8. xgboost之spark上运行-scala接口
  9. AdBoost算法详解
  10. 下一个游戏新风口已来?小游戏或成2018年最大游戏黑马