一:如果你需要在你的本地项目中配置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中的配置 及其简单的使用的更多相关文章

  1. 39、生鲜电商平台-redis缓存在商品中的设计与架构

    说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc ...

  2. Java生鲜电商平台-redis缓存在商品中的设计与架构

    Java生鲜电商平台-redis缓存在商品中的设计与架构 说明:Java开源生鲜电商平台-redis缓存在商品中的设计与架构. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而 ...

  3. redis在spring中的配置及java代码实现

    1.建一个redis.properties属性文件 # Redis Setting redis.addr = 127.0.0.1 redis.port = 6379 redis.auth = mast ...

  4. springboot 用redis缓存整合spring cache注解,使用Json序列化和反序列化。

    springboot下用cache注解整合redis并使用json序列化反序列化. cache注解整合redis 最近发现spring的注解用起来真的是很方便.随即产生了能不能吧spring注解使用r ...

  5. C3P0连接池在hibernate和spring中的配置

    首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...

  6. redis缓存在项目中的使用

    关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...

  7. Redis缓存在django中的配置

    django  settings中的配置 # 缓存 CACHES = { "default": { "BACKEND": "django_redis. ...

  8. Velocity初探小结--Velocity在spring中的配置和使用

    最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...

  9. Spring中事务配置以及事务不起作用可能出现的问题

    前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解 ...

随机推荐

  1. Umi+Dva搭建Cesium 3D开发环境

    umi,中文可发音为乌米,是一个可插拔的企业级 react 应用框架,是蚂蚁金服的底层前端框架,已直接或间接地服务了 600+ 应用,包括 java.node.H5 无线.离线(Hybrid)应用.纯 ...

  2. Python3 调试技巧 —— 死循环

    说下Python3不使用gdb的自身调试 前情提要:服务器莫名卡死,用网上的方法用gdb,下载了很多组件,包括那个libpython.py,都没什么用,看不到堆栈,也试了保存core文件等等 大事找官 ...

  3. SQL 获取时间段内日期列表

    declare @start date,@end date; set @start='2010-01-01'; set @end='2010-02-01'; --获取时间段内日期列表 select [ ...

  4. lua os.date函数定义和示例

    os.date函数定义 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. lua源码中os.date的注释如下: --- --- ...

  5. 使用docker安装mysql和redis

    本文介绍在linux下使用docker安装mysql和redis. 原文地址:代码汇个人博客 http://www.codehui.net/info/59.html 测试环境:centos7.6,do ...

  6. tmux resurrect 配置

    概述 tmux 用了很长时间了, 快捷键定制了不少, 唯一的遗憾是没法保存 session, 每次关机重开之后, 恢复不到之前的 tmux session. 虽然也能忍受, 但是每天都手动打开之前的 ...

  7. asyncio 基础用法

    asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...

  8. docker 不能访问外网

    如果之前docker能访问外网,现在不能访问, 同时宿主机可以访问外网,那就重启docker.

  9. django.db.utils.ProgrammingError: (1146, "Table 'db_gold.user_ip_info' doesn't exist") RuntimeError: Model class scanhosts.models.HostLoginInfo doesn't declare an explicit app_label and isn't in an a

    Error Msg 创建了一个apps的目录将所有app放入apps文件中, 将apps路径加入sys.path中:sys.insert(0, os.path.join(BASE_DIR, " ...

  10. 接口Set

    Set接口简介 java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Coll ...