简单示例:Spring4 整合 单个Redis服务
1. 引入spring-data-redis.jar
2. spring配置文件添加如下配置
<!-- redis配置 -->
<context:property-placeholder location="classpath:redis.properties" />
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxTotal" value="${redis.maxTotal}" />
<!--<property name="maxWaitMillis" value="${redis.maxWaitMillis}" />-->
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
<!--<property name="testOnReturn" value="${redis.testOnReturn}" />-->
<!--<property name="blockWhenExhausted" value="${redis.blockWhenExhausted}" />-->
</bean> <!--<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"-->
<!--p:hostName="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:poolConfig-ref="poolConfig"/>-->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:hostName="${redis.host}" p:port="${redis.port}" p:poolConfig-ref="poolConfig"/> <!-- SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。 StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采
用此策略序列化保存的。 RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。 就是因为序列化策略的不同,即使是同一个key用不同的
Template去序列化,结果是不同的。所以根据key去删除数据的时候就出现了删除失败的问题。 --> <!-- redis 序列化策略 ,通常情况下key值采用String序列化策略, --> <!-- 如果不指定序列化策略,StringRedisTemplate的key和value都将采用String序列化策略; -->
<!-- 但是RedisTemplate的key和value都将采用JDK序列化 这样就会出现采用不同template保存的数据不能用同一个template删除的问题 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<property name="enableTransactionSupport" value="true" />
</bean>
# Redis settings #redis的服务器地址
redis.host=localhost
#redis的服务端口
redis.port=6379
#密码
redis.pass=123 #最大空闲数
redis.maxIdle=300
#最大总数
redis.maxTotal=1000
#指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
3. Redis工具类
package com.*; import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component; import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; /**
* Created by Administrator on 2017/3/8.
*/
@Component
public class RedisManager<T> {
private Logger log = Logger.getLogger(RedisManager.class); @Autowired
private RedisTemplate redisTemplate; /** =================================== Hash ====================================================**/ /**
* 缓存Map
*
* @param key
* @param hashKey
* @param t
* @return
*/
public void setCacheMap(String key, String hashKey, T t) {
BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(key);
boundHashOperations.put(hashKey, t);
// boundHashOperations.expire(BasConstant.MEMORY_TOKEN_EXPIRES, TimeUnit.DAYS);
// redisTemplate.opsForValue().set(realToken, studentVo, BasConstant.TOKEN_EXPIRES_HOUR, TimeUnit.DAYS);
//存储到redis并设置过期时间
// redisTemplate.boundValueOps(realToken).set(studentVo, BasConstant.TOKEN_EXPIRES_HOUR, TimeUnit.DAYS);
} /**
* 获得缓存的Map
*
* @param key //* @param hashOperation
* @return
*/
public <T> Map<String, T> getCacheMap(String key/*,HashOperations<String,String,T> hashOperation*/) {
Map<String, T> map = redisTemplate.opsForHash().entries(key);
/*Map<String, T> map = hashOperation.entries(key);*/
return map;
} /**
* 获取缓存的map大小
*
* @param key
* @return
*/
public long getCacheMapSize(String key) {
return redisTemplate.opsForHash().size(key);
} /**
* 获取map的value值
*
* @param key key
* @param hashKey field
* @return
*/
public Object getMapValue(String key, String hashKey) {
return redisTemplate.opsForHash().get(key, hashKey);
} /**
* 是否存在 key 及 field
*
* @param key key
* @param hashKey field
* @return
*/
public boolean hasHashKey(String key, String hashKey) {
return redisTemplate.opsForHash().hasKey(key, hashKey);
} /**
* 延期
*
* @param key
* @return
*/
public boolean expireHash(String key, long time) {
return redisTemplate.boundHashOps(key).expire(time, TimeUnit.DAYS);
} /**
* 从redis中删除key缓存
*
* @param key
*/
public void deleteHashKey(String key, Object... hashKeys) {
redisTemplate.opsForHash().delete(key, hashKeys);
} /** =================================== 通用 ====================================================**/ /**
* 从redis中删除key缓存
*
* @param key
*/
public void deleteKey(String key, Object... hashKeys) {
redisTemplate.delete(key);
} /**
* 是否存在key
*
* @param key
* @return 是否存在key
*/
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
} /**
* 延期
*
* @param key 键值
* @return
*/
public boolean expire(String key, long time, TimeUnit timeUnit) {
return redisTemplate.expire(key, time, timeUnit);
} /** =================================== List ====================================================**/ /**
* list缓存
*
* @param key
* @param value
* @return
*/
public boolean setCacheList(String key, String value) {
try {
ListOperations<String, String> listOps = redisTemplate.opsForList();
listOps.rightPush(key, value);
return true;
} catch (Throwable t) {
log.error("缓存[" + key + "]失败, value[" + value + "]", t);
}
return false;
} public void setValueForList(String key, long index, Object value){
BoundListOperations listOps = redisTemplate.boundListOps(key);
listOps.set(index, value);
} /**
* 缓存list
*
* @param key 键值
* @param list value
* @return
*/
public void setCacheList(String key, List list) {
BoundListOperations listOps = redisTemplate.boundListOps(key);
//只能以数组形式存放
listOps.rightPushAll(list.toArray());
} /**
* 获取list缓存 - 根据起始~终止位置
*
* @param key 键值
* @param start 起始位置
* @param end 截止位置
* @return
*/
public List getList(String key, long start, long end) {
List list = null;
try {
BoundListOperations listOperations = redisTemplate.boundListOps(key);
list = listOperations.range(start, end);
} catch (Throwable t) {
log.error("获取list缓存失败key[" + key + ", error[" + t + "]");
}
return list;
} /**
* 获取list缓存 - 根据索引位置
*
* @param key 键值
* @param i 索引位置
* @return
*/
public Object getCacheList(String key, int i) {
BoundListOperations listOps = redisTemplate.boundListOps(key);
return listOps.index(i);
} /**
* 获取总条数, 可用于分页
*
* @param key
* @return
*/
public long getCacheListSize(String key) {
BoundListOperations listOps = redisTemplate.boundListOps(key);
return listOps.size();
}
}
4. 在service中引入使用工具类操作redis
简单示例:Spring4 整合 单个Redis服务的更多相关文章
- 【Redis】三、Redis安装及简单示例
(四)Redis安装及使用 Redis的安装比较简单,仍然和大多数的Apache开源软件一样,只需要下载,解压,配置环境变量即可.具体安装过程参考:菜鸟教程Redis安装. 安装完成后,通过r ...
- Windows下安装Redis服务
说明:本文拷贝自https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html Redis是有名的NoSql数据库,一般Linux都会默 ...
- Redis 安装与简单示例 01_转
一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或者64位.下载解压后图片如下 ...
- Redis 安装与简单示例 <第一篇>
一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或者64位.下载解压后图片如下 ...
- Redis 安装与简单示例(转)
本文转载自:http://www.cnblogs.com/kissdodog/p/3570984.html Redis的安装 Redis下载地址如下:https://github.com/dmajki ...
- Redis 安装与简单示例
Redis 安装与简单示例 一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或 ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- Redis 安装与简单示例 <第一篇>【转】
一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或者64位.下载解压后图片如下 ...
- Java操作redis简单示例
第一:安装Redis 首先我们要安装Redis,就像我们操作数据库一样,在操作之前肯定要先创建好数据库的环境. Redis的下载可以百度一下,或者打开下面的下载链接: https:/ ...
随机推荐
- j2ee数据库连接池配置大全
<!--web.xml begin--> <!--web.xml Spring ApplicationContext配置文件的路径 ,可使用通配符,多个路径用,号分隔 --> ...
- C# chart控件基础使用
基本介绍:chart(图表) 功能:主要用来绘制折线图,柱状图与饼状图,也可达到动态效果(例如作示波器): 需要说明 一个chart可以包含多个chartArea. chartArea是具体的坐标区域 ...
- SSM实战——秒杀系统之高并发优化
一:高并发点 高并发出现在秒杀详情页,主要可能出现高并发问题的地方有:秒杀地址暴露.执行秒杀操作. 二:静态资源访问(页面)优化——CDN CDN,内容分发网络.我们把静态的资源(html/css/j ...
- Struts2学习笔记四:深入拦截器
一:拦截器的工作原理 拦截器的执行过程可以类比filter过滤器,ActionInvocation实例执行过程中,先执行action实例上引用的拦截器们,然后才执行action实例处理请求,返回res ...
- .NET/C#中对自定义对象集合进行自定义排序的方法
一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...
- java 属性封装
//封装性 //封装概念: //1.是面向对象思想的三大特征之一 //2.封装细节是隐藏的,仅对外提供访问接口 //3.封装分类: //属性封装 //方法封装 //类的封装 //组件的封装 //模块化 ...
- Spring Cloud Edgware Release Notes
Spring Cloud Edgware builds on Spring Boot 1.5.x. Renamed starters A number of starters did not foll ...
- 纯C++去雾算法
去雾算法 前言:经过不断的改进研究,该算法最终稳定,高效的问世了. 经过研究使该算法适应大雾环境,对该算法的内存优化,可以实时的高效的执行. 一.实时视频: watermark/2/text/aHR0 ...
- Spring MVC 教程,快速入门,深入分析[1-11]
资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com ...
- httpclient获取响应实体和信息的封装方法(解耦更新)
转自:https://blog.csdn.net/fhaohaizi/article/details/77850302 2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpcli ...