文档章节

spring-data-redis缓存使用

土茯苓
 土茯苓
发布于 2016/09/22 19:34
字数 772
阅读 337
收藏 6

缓存命中率,即从缓存中读取数据的次数 与 总读取次数的比率,命中率越高越好:

命中率 = 从缓存中读取次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数])

Miss率 = 没有从缓存中读取的次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数])

缓存策略(Eviction policy):移除策略,即如果缓存满了,从缓存中移除数据的策略;常见的有LFU、LRU、FIFO:

  • FIFO(First In First Out):先进先出算法,即先放入缓存的先被移除;
  • LRU(Least Recently Used):最久未使用算法,使用时间距离现在最久的那个被移除;
  • LFU(Least Frequently Used):最近最少使用算法,一定时间段内使用次数(频率)最少的那个被移除;

TTL(Time To Live ):存活期,即从缓存中创建时间点开始直到它到期的一个时间段(不管在这个时间段内有没有访问都将过期);

TTI(Time To Idle):空闲期,即一个数据多久没被访问将从缓存中移除的时间。

Spring 提供了核心的Cache接口:

package org.springframework.cache;  
  
public interface Cache {  
    String getName();  //缓存的名字  
    Object getNativeCache(); //得到底层使用的缓存,如Ehcache  
    ValueWrapper get(Object key); //根据key得到一个ValueWrapper,然后调用其get方法获取值  
    <T> T get(Object key, Class<T> type);//根据key,和value的类型直接获取value  
    void put(Object key, Object value);//往缓存放数据  
    void evict(Object key);//从缓存中移除key对应的缓存  
    void clear(); //清空缓存  
  
    interface ValueWrapper { //缓存值的Wrapper  
        Object get(); //得到真实的value  
        }  
}  

提供了缓存操作的读取/写入/移除方法;

这个接口有默认的实现:

如果你使用了Spring提供的redis集成依赖包:

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

先在pom.xml文件中加入以下依赖包:

<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.5.2</version>  
</dependency>  

然后在工程的classpath下新建一个Redis的配置文件redis.properties

redis.host=xxx.xxx.xxx.xxx
redis.port=6379
redis.password=xxxxxx
redis.maxIdle=100
redis.maxActive=300
redis.maxWait=1000
redis.testOnBorrow=true
redis.timeout=100000

接下来在Spring的application.xml文件中加入一下配置

 <!-- redis 相关配置 -->    
     <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" > 
     <property name="maxIdle" value="${redis.maxIdle}" /> 
     <property name="maxWaitMillis" value="${redis.maxWait}" /> 
     <property name="testOnBorrow" value="${redis.testOnBorrow}" /> 
     </bean> 
     <!-- redis服务器中心 -->
     <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" > 
     <property name="poolConfig" ref="poolConfig" /> 
     <property name="port" value="${redis.port}" /> 
     <property name="hostName" value="${redis.host}" /> 
     <property name="password" value="${redis.password}" /> 
     <property name="timeout" value="${redis.timeout}" />
     </bean> 
     <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">    
        <property name="connectionFactory" ref="connectionFactory" />    
    </bean>    

别忘记把之前的redis.properties加载进去。

最后还要添加:

<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
        c:template-ref='redisTemplate'/>
<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->  
    <cache:annotation-driven cache-manager="cacheManager" />  

这样子,你就就可以在方法上使用Spring Cache的注解来实现缓存了

@Cacheable(value = "userCache", key = "'User.'+#userId")
	public User getUserById(int userId) {
		logger.info("没有缓存,直接数据库获取数据");;
		return this.userDao.selectByPrimaryKey(userId);
	}

 

 

© 著作权归作者所有

共有 人打赏支持
下一篇: Tomcat 优化配置
土茯苓
粉丝 32
博文 171
码字总数 194079
作品 0
朝阳
高级程序员
私信 提问
Spring Cache For Redis.

一、概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的。 常用的缓存数据库: Redis 使用内存存储(in-memory)的非关系数据库,字符串、列表、集...

jmcui
02/04
0
0
[springboot](五)整合redis

版权声明:本文为博主原创文章,未经博主允许不得转载。有任何问题请邮件联系ashuo.com@qq.com https://blog.csdn.net/drdongshiye/article/details/82717608 spring boot对常用的数据库支持...

菜鸟腾飞
09/15
0
0
springboot cache redis 缓存

上一节学习spring的cache缓存,介绍了spring缓存的基础: https://my.oschina.net/silenceyawen/blog/1555996 现在学习使用redis实现缓存: 1. 指定provider可以使用配置: 2. redis在这里充...

yawnSilence
2017/10/26
0
0
iBase4J 更新:支持 motan 和 dubbo 切换

iBase4J 发布了更新,新增以下内容: 1、支持motan和dubbo切换 2、优化缓存,以spring-data-redis为主; 3、升级spring,spring-session,spring-data-redis,mybatis-plus,druid版本升级;...

iBase4J
2017/08/03
1K
6
springboot之Redis的使用

spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化。 redis介绍 Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lis...

无语年华
05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
19分钟前
0
0
HIVE数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,...

瑞查德-Jack
29分钟前
0
0
Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
38分钟前
4
0
开源 serverless 产品原理剖析(二) - Fission

背景 本文是开源 serverless 产品原理剖析系列文章的第二篇,关于 serverless 背景知识的介绍可参考文章开源 serverless 产品原理剖析(一) - Kubeless,这里不再赘述。 Fission 简介 Fiss...

阿里云官方博客
45分钟前
2
0
Android面试整理(附答案)

面试,无非都是问上面这些问题(挺多的 - -!),聘请中高级的安卓开发会往深的去问,并且会问一延伸二。以下我先提出几点重点,是面试官基本必问的问题,请一定要去了解! 基础知识 – 四大组...

终端研发部
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部