浅析redis缓存 在spring中的配置 及其简单的使用
一:如果你需要在你的本地项目中配置redis。那么你首先得需要在你的本地安装redis
参考链接【http://www.runoob.com/redis/redis-install.html】
下载redis在网上有很多 我这里就不多做解释了 下载以后 找到这样的三个文件 这是我们需要操作的 每个版本可能不一样 但这几个肯定是有的

然后 安装这个http://www.runoob.com/redis/redis-install.html
进行配置 当然很重要的一步是你需要在 redis.windows.conf 加入
#200MB
maxmemory 209715200
#300MB maxheap=1.5*maxmemory
maxheap 314572800
两句 防止 内存问题 导致的启动不成功。
二:安装redis成功之后 。需要在项目中 进行redis配置
首先 参数如下图所示: 配置完成后 需要在 你的spring.xml中 载入redis-xml :<import resource="spring-redis.xml"/>
redis_ip=127.0.0.1
redis_port=6379 #当池内没有返回对象时,最大等待时间
redis_maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis_testOnBorrow=false
#当调用return Object方法时,是否进行有效性检查
redis_testOnReturn=false redis_testWhileIdle = true redis_maxTotal=100
#最大能够保持idel状态的对象数
redis_maxIdle=10 #是否开启缓存
enableCache=true
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
>
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis_ip}" />
<property name="port" value="${redis_port}" />
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
<property name="connectionFactory" ref="jedisConnectionFactory"></property>
</bean> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxWaitMillis" value="${redis_maxWaitMillis}"/>
<property name="testOnBorrow" value="${redis_testOnBorrow}"/>
<property name="testOnReturn" value="${redis_testOnReturn}"/>
<property name="testWhileIdle" value="${redis_testWhileIdle}"/>
<property name="maxTotal" value="${redis_maxTotal}"/>
<property name="maxIdle" value="${redis_maxIdle}"/>
<property name="timeBetweenEvictionRunsMillis" value="30000"/>
<property name="minEvictableIdleTimeMillis" value="30000"/>
</bean>
<!--只想操作类 并且把redisTemplate注入进去-->
<bean class="com.cdms.service.cache.impl.IRedisCacheServiceImpl">
<property name="redisTemplate" ref="redisTemplate"></property>
<property name="enableCache" value="${enableCache}"></property>
</bean>
</beans>
对于在代码中的操作 只需要定义一个借口 和 一个实现类就行
package com.cdms.service.cache; import com.alibaba.fastjson.TypeReference; /**
* 创建 by 草帽boy on 2017/3/31.
*/
public interface ICacheService{ /**
* 存入缓存数据
* @param key 在缓存中的key值
* @param value 待储存的value值
* @param liveTime 存活时间 单位是秒
*/
void set(final String key,final Object value,final long liveTime); /**
* 获取到缓存数据
* @param key 获取的key值
* @param type 获取的类型
* @param <T> 泛型
* @return 你所需要的类型值
*/
<T> T get(final String key, final TypeReference<T> type ); /**
* 获取剩余存活时间
* @param key 返回
* @return
*/
long getLiveTime(final String key); /**
* 删除缓存中的缓存数据
* @param key key值
*/
void del(final String key);
}
package com.cdms.service.cache.impl; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.cdms.service.cache.ICacheService;
import com.cdms.util.SerializeUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import java.io.UnsupportedEncodingException; /**
* 创建 by 草帽boy on 2017/3/31.
*/
public class IRedisCacheServiceImpl implements ICacheService{ public final Logger logger = LoggerFactory.getLogger(this.getClass()); //是否缓存。默认是不缓存
private static boolean enableCache = false; private static RedisTemplate redisTemplate; public boolean isEnableCache() {
return enableCache;
} public void setEnableCache(boolean enableCache) {
IRedisCacheServiceImpl.enableCache = enableCache;
} public RedisTemplate getRedisTemplate() {
return redisTemplate;
} public void setRedisTemplate(RedisTemplate redisTemplate) {
IRedisCacheServiceImpl.redisTemplate = redisTemplate;
} private void set(final byte[] key, final byte[] value, final long ttl) {
if (enableCache == false) {
return;
}
redisTemplate.execute(new RedisCallback<Void>() {
@Override
public Void doInRedis(RedisConnection con) {
try {
con.set(key, value);
if (ttl != 0) con.expire(key, ttl);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
});
} protected byte[] get(final byte[] key) {
if (enableCache == false) {
return null;
}
try {
return (byte[]) redisTemplate.execute(new RedisCallback<byte[]>() {
@Override
public byte[] doInRedis(RedisConnection con) { return con.get(key); }
});
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
} private long ttl(final byte[] key) {
if (enableCache == false) {
return 0;
}
try {
Long t = (Long) redisTemplate.execute(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection con) {
return con.ttl(key);
}
}); return t.longValue(); }catch (Exception ex){
logger.error(ex.getMessage(), ex);
return 0;
}
} protected void del(final byte[]... key) {
if (enableCache == false || key == null) {
return;
}
try {
redisTemplate.execute(new RedisCallback<Void>() {
@Override
public Void doInRedis(RedisConnection con) {
con.del(key);
return null;
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
} @Override
public void set(String key, Object value, long liveTime) {
byte[] keys = key.getBytes();
String valString = JSON.toJSONString(value);
byte[] values = valString.getBytes();
set(keys,values,liveTime);
} @Override
public <T> T get(String key, TypeReference<T> type) {
byte[] valueData = get(key.getBytes());
if(valueData==null||valueData.length<0){
return null;
}
String valString = "";
try {
valString = new String(valueData,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
T data = JSON.parseObject(valString,type);
return data;
} @Override
public long getLiveTime(String key) {
return ttl(key.getBytes());
} @Override
public void del(String key) {
del(key.getBytes());
} }
三:测试 当你需要进行写入redis缓存的时候 你的redis服务器必须是开着的
就是 你的reids应该在这个状态:

@Test
public void tests(){ List<String> mm = new ArrayList<String>();
mm.add("你好啊");
mm.add("tests");
iCacheService.set("test",mm,60);
List<String> tesss = iCacheService.get("test",new TypeReference<List<String>>(){});
if(tesss!=null){
System.out.println(">>>>>>>>>>>"+tesss);
}
System.out.println(">>>>>>>>>>>>>"+iCacheService.getLiveTime("test")); }
结果:

浅析redis缓存 在spring中的配置 及其简单的使用的更多相关文章
- 39、生鲜电商平台-redis缓存在商品中的设计与架构
说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc ...
- Java生鲜电商平台-redis缓存在商品中的设计与架构
Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而 ...
- redis在spring中的配置及java代码实现
1.建一个redis.properties属性文件 # Redis Setting redis.addr = 127.0.0.1 redis.port = 6379 redis.auth = mast ...
- springboot 用redis缓存整合spring cache注解,使用Json序列化和反序列化。
springboot下用cache注解整合redis并使用json序列化反序列化. cache注解整合redis 最近发现spring的注解用起来真的是很方便.随即产生了能不能吧spring注解使用r ...
- C3P0连接池在hibernate和spring中的配置
首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...
- redis缓存在项目中的使用
关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...
- Redis缓存在django中的配置
django settings中的配置 # 缓存 CACHES = { "default": { "BACKEND": "django_redis. ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- Spring中事务配置以及事务不起作用可能出现的问题
前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解 ...
随机推荐
- Java面试 32个核心必考点完全解析
目录 课程预习 1.1 课程内容分为三个模块 1.2 换工作面临问题 1.3 课程特色 课时1:技术人职业发展路径 1.1 工程师发展路径 1.2 常见技术岗位划分 1.3 面试岗位选择 1.4 常见 ...
- Cookie 数据浅谈
Cookie 是一些数据, 存储于你电脑上的文本文件中. 当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息. Cookie 的作用就是用于解决 "如 ...
- 基于html5 plus + Mui 移动App开发(一)
使用Html5 plus + Mui 进行移动App开发,有一段时间了,这几日得空,做个资讯App分享给大家. 今天主要分享主页实现,首先看下效果: 此界面主要分为:标题.内容分类列表.搜索及设置按钮 ...
- 360浏览器兼容模式下IE内核版本
问题 最近在跟客户演示系统时,自己电脑IE 11下好好的,我们web系统最低支持到IE9.在客户电脑上,IE9浏览器下可以正常浏览,但是360兼容模式下,页面什么也不显示. 通过F12调试工具发现,3 ...
- Webpack4教程 - 第二部分,使用loader处理scss,图片以及转换JS
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://wanago.io/2018/07/16/webpack-4-course-par ...
- 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(3)!
---恢复内容开始--- 前言- 虽然上文说的是model的绘制但是这个说法并不严谨,之前的几个例子都会有模型文件的读入和载入,可是在LAppRenderer.LAppView中并没有.moc等文件的 ...
- 高通平台如何避免误入FFBM模式
前面两篇博客分别介绍了通过fastboot和QFIL工具退出FFBM模式的方法.虽然售后的同学可以这么指导用户做恢复,但步骤多操作也麻烦,且属于事后处理,如果大面积高概率地出现,会严重影响用户体验.这 ...
- deepin linux学习笔记(四)进不去图形界面怎么办?
目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...
- 【English】十六、时间相关
〇.其他 date: I have a date with her tomarrow. n.约会;日期,日子;时代,年代; vt.过时;使…显老;显示出…时代(或年龄);鉴定…的年代 vt.& ...
- go的生产者-消费者模式
package main import ( "fmt" "math/rand" "time" ) // 数据生产者 func produce ...