设为首页 收藏本站
查看: 432|回复: 0

[经验分享] spring-data-redis详解

[复制链接]

尚未签到

发表于 2016-12-18 09:22:48 | 显示全部楼层 |阅读模式
  使用spring-data-redis实现java和redis的连接及操作
  官方文档:http://projects.spring.io/spring-data-redis/#quick-start
  1 下载 spring-data-redis的jar包

<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
</dependencies>
  http://grepcode.com/snapshot/repo1.maven.org/maven2/org.springframework.data/spring-data-redis/1.4.0.RELEASE

[html] view plaincopyprint?






  • redis.host=192.168.1.20//redis的服务器地址  

  • redis.port=6400//redis的服务端口  

  • redis.pass=1234xxxxx//密码  

  • redis.default.db=0//链接数据库  

  • redis.timeout=100000//客户端超时时间单位是毫秒  

  • redis.maxActive=300// 最大连接数  

  • redis.maxIdle=100//最大空闲数  



redis.host=192.168.1.20//redis的服务器地址
redis.port=6400//redis的服务端口
redis.pass=1234xxxxx//密码
redis.default.db=0//链接数据库
redis.timeout=100000//客户端超时时间单位是毫秒
redis.maxActive=300// 最大连接数
redis.maxIdle=100//最大空闲数

[html] view plaincopyprint?






  • redis.maxWait=1000//最大建立连接等待时间  

  • redis.testOnBorrow=true//<span style="font-size: 12px;">指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个</span>  



redis.maxWait=1000//最大建立连接等待时间
redis.testOnBorrow=true//指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
  spring 中配置

[html] view plaincopyprint?






  • <bean id="propertyConfigurerRedis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  •         <property name="order" value="1" />  
  •         <property name="ignoreUnresolvablePlaceholders" value="true" />  
  •         <property name="locations">  
  •             <list>  
  •                 <value>classpath:config/redis-manager-config.properties</value>  
  •             </list>  
  •         </property>  
  •     </bean>  
  •       
  •         <!-- jedis pool配置 -->  
  •     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
  •         <property name="maxActive" value="${redis.maxActive}" />  
  •         <property name="maxIdle" value="${redis.maxIdle}" />  
  •         <property name="maxWait" value="${redis.maxWait}" />  
  •         <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
  •     </bean>  
  •   
  •     <!-- spring data redis -->  
  •     <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">  
  •         <property name="usePool" value="true"></property>  
  •         <property name="hostName" value="${redis.host}" />  
  •         <property name="port" value="${redis.port}" />  
  •         <property name="password" value="${redis.pass}" />  
  •         <property name="timeout" value="${redis.timeout}" />  
  •         <property name="database" value="${redis.default.db}"></property>  
  •         <constructor-arg index="0" ref="jedisPoolConfig" />  
  •     </bean>  
  •       
  •     <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  
  •         <property name="connectionFactory" ref="jedisConnectionFactory" />  
  •     </bean>  



<bean id="propertyConfigurerRedis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="locations">
<list>
<value>classpath:config/redis-manager-config.properties</value>
</list>
</property>
</bean>
<!-- jedis pool配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive" value="${redis.maxActive}" />
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxWait" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<!-- spring data redis -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="usePool" value="true"></property>
<property name="hostName" value="${redis.host}" />
<property name="port" value="${redis.port}" />
<property name="password" value="${redis.pass}" />
<property name="timeout" value="${redis.timeout}" />
<property name="database" value="${redis.default.db}"></property>
<constructor-arg index="0" ref="jedisPoolConfig" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>

[html] view plaincopyprint?





  •    



 

[html] view plaincopyprint?






  • <!--配置一个基础类(之后的业务类继承于该类)、将redisTemplate注入 -->  



<!--配置一个基础类(之后的业务类继承于该类)、将redisTemplate注入 -->

[html] view plaincopyprint?






  • <bean id="redisBase" abstract="true">  
  •   <property name="template" ref="redisTemplate"></property>  
  •  </bean>  



<bean id="redisBase" abstract="true">
  <property name="template" ref="redisTemplate"></property>
 </bean>
  
java代码:

[java] view plaincopyprint?






  • public class RedisBase {  
  •   
  •     private StringRedisTemplate template;  
  •   
  •     /** 

  •      * @return the template 

  •      */  
  •     public StringRedisTemplate getTemplate() {  
  •         return template;  
  •     }  
  •   
  •     /** 

  •      * @param template the template to set 

  •      */  
  •     public void setTemplate(StringRedisTemplate template) {  
  •         this.template = template;  
  •     }  
  •   
  • }  



public class RedisBase {
private StringRedisTemplate template;
/**
* @return the template
*/
public StringRedisTemplate getTemplate() {
return template;
}
/**
* @param template the template to set
*/
public void setTemplate(StringRedisTemplate template) {
this.template = template;
}
}
  继续:
  下面就是具体redis的值的写入、读出、清除缓存喽!
  第一:写入

[java] view plaincopyprint?






  • public class StudentCountDO {  
  •   
  •     private Long id;  
  •   
  •        private String studentId;  
  •   
  •         private Long commentHeadCount;  
  •   
  •        private Long docAttitudeScores;  
  •   
  •        private Long guideServiceScores;  
  •   
  •         private Long treatEffectCount;  
  •   
  •        private Long treatEffectScores;  
  •   
  •     private String gmtModified;  
  •   
  •     private String gmtCreated;  
  •   
  •         private Long waitingTimeScores;  
  •   
  •    }  



public class StudentCountDO {
private Long id;
private String studentId;
private Long commentHeadCount;
private Long docAttitudeScores;
private Long guideServiceScores;
private Long treatEffectCount;
private Long treatEffectScores;
private String gmtModified;
private String gmtCreated;
private Long waitingTimeScores;
}
  
 

[java] view plaincopyprint?





  • StringRedisTemplate template = getTemplate();//获得上面注入的template  
  •        // save as hash 一般key都要加一个前缀,方便清除所有的这类key  
  •        BoundHashOperations<String, String, String> ops = template.boundHashOps("student:"+studentCount.getStudentId());  
  •   
  •        Map<String, String> data = new HashMap<String, String>();  
  •        data.put("studentId", CommentUtils.convertNull(studentCount.getStudentId()));  
  •        data.put("commentHeadCount", CommentUtils.convertLongToString(studentCount.getCommentHeadCount()));  
  •        data.put("docAttitudeScores", CommentUtils.convertLongToString(studentCount.getDocAttitudeScores()));  
  •        data.put("guideServicesScores", CommentUtils.convertLongToString(studentCount.getGuideServiceScores()));  
  •        data.put("treatEffectCount", CommentUtils.convertLongToString(studentCount.getTreatEffectCount()));  
  •        data.put("treatEffectScores", CommentUtils.convertLongToString(studentCount.getTreatEffectScores()));  
  •        data.put("waitingTimeScores", CommentUtils.convertLongToString(studentCount.getWaitingTimeScores()));  
  •        try {  
  •            ops.putAll(data);  
  •        } catch (Exception e) {  
  •            logger.error(CommentConstants.WRITE_EXPERT_COMMENT_COUNT_REDIS_ERROR + studentCount.studentCount(), e);  
  •        }  



StringRedisTemplate template = getTemplate();//获得上面注入的template
// save as hash 一般key都要加一个前缀,方便清除所有的这类key
BoundHashOperations<String, String, String> ops = template.boundHashOps("student:"+studentCount.getStudentId());
Map<String, String> data = new HashMap<String, String>();
data.put("studentId", CommentUtils.convertNull(studentCount.getStudentId()));
data.put("commentHeadCount", CommentUtils.convertLongToString(studentCount.getCommentHeadCount()));
data.put("docAttitudeScores", CommentUtils.convertLongToString(studentCount.getDocAttitudeScores()));
data.put("guideServicesScores", CommentUtils.convertLongToString(studentCount.getGuideServiceScores()));
data.put("treatEffectCount", CommentUtils.convertLongToString(studentCount.getTreatEffectCount()));
data.put("treatEffectScores", CommentUtils.convertLongToString(studentCount.getTreatEffectScores()));
data.put("waitingTimeScores", CommentUtils.convertLongToString(studentCount.getWaitingTimeScores()));
try {
ops.putAll(data);
} catch (Exception e) {
logger.error(CommentConstants.WRITE_EXPERT_COMMENT_COUNT_REDIS_ERROR + studentCount.studentCount(), e);
}
  第二、 取出

[java] view plaincopyprint?






  • public StudentCountDO getStudentCommentCountInfo(String studentId) {  
  •        final String strkey = "student:"+ studentId;  
  •        return getTemplate().execute(new RedisCallback<StudentCountDO>() {  
  •            @Override  
  •            public StudentCountDO doInRedis(RedisConnection connection) throws DataAccessException {  
  •                byte[] bkey = getTemplate().getStringSerializer().serialize(strkey);  
  •                if (connection.exists(bkey)) {  
  •                    List<byte[]> value = connection.hMGet(bkey,  
  •                            getTemplate().getStringSerializer().serialize("studentId"), getTemplate()  
  •                                    .getStringSerializer().serialize("commentHeadCount"), getTemplate()  
  •                                    .getStringSerializer().serialize("docAttitudeScores"), getTemplate()  
  •                                    .getStringSerializer().serialize("guideServicesScores"), getTemplate()  
  •                                    .getStringSerializer().serialize("treatEffectCount"), getTemplate()  
  •                                    .getStringSerializer().serialize("treatEffectScores"), getTemplate()  
  •                                    .getStringSerializer().serialize("waitingTimeScores"));  
  •                    StudentCountDO studentCommentCountDO = new StudentCountDO();  
  •                    studentCommentCountDO.setExpertId(getTemplate().getStringSerializer().deserialize(value.get(0)));  
  •                    studentCommentCountDO.setCommentHeadCount(Long.parseLong(getTemplate().getStringSerializer()  
  •                            .deserialize(value.get(1))));  
  •                    studentCommentCountDO.setDocAttitudeScores(Long.parseLong(getTemplate().getStringSerializer()  
  •                            .deserialize(value.get(2))));  
  •                    studentCommentCountDO.setGuideServiceScores(Long.parseLong(getTemplate().getStringSerializer()  
  •                            .deserialize(value.get(3))));  
  •                    studentCommentCountDO.setTreatEffectCount(Long.parseLong(getTemplate().getStringSerializer()  
  •                            .deserialize(value.get(4))));  
  •                    studentCommentCountDO.setTreatEffectScores(Long.parseLong(getTemplate().getStringSerializer()  
  •                            .deserialize(value.get(5))));  
  •                    studentCommentCountDO.setWaitingTimeScores(Long.parseLong(getTemplate().getStringSerializer()  
  •                            .deserialize(value.get(6))));  
  •                    return studentCommentCountDO;  
  •                }  
  •                return null;  
  •            }  
  •        });  
  •    }  



public StudentCountDO getStudentCommentCountInfo(String studentId) {
final String strkey = "student:"+ studentId;
return getTemplate().execute(new RedisCallback<StudentCountDO>() {
@Override
public StudentCountDO doInRedis(RedisConnection connection) throws DataAccessException {
byte[] bkey = getTemplate().getStringSerializer().serialize(strkey);
if (connection.exists(bkey)) {
List<byte[]> value = connection.hMGet(bkey,
getTemplate().getStringSerializer().serialize("studentId"), getTemplate()
.getStringSerializer().serialize("commentHeadCount"), getTemplate()
.getStringSerializer().serialize("docAttitudeScores"), getTemplate()
.getStringSerializer().serialize("guideServicesScores"), getTemplate()
.getStringSerializer().serialize("treatEffectCount"), getTemplate()
.getStringSerializer().serialize("treatEffectScores"), getTemplate()
.getStringSerializer().serialize("waitingTimeScores"));
StudentCountDO studentCommentCountDO = new StudentCountDO();
studentCommentCountDO.setExpertId(getTemplate().getStringSerializer().deserialize(value.get(0)));
studentCommentCountDO.setCommentHeadCount(Long.parseLong(getTemplate().getStringSerializer()
.deserialize(value.get(1))));
studentCommentCountDO.setDocAttitudeScores(Long.parseLong(getTemplate().getStringSerializer()
.deserialize(value.get(2))));
studentCommentCountDO.setGuideServiceScores(Long.parseLong(getTemplate().getStringSerializer()
.deserialize(value.get(3))));
studentCommentCountDO.setTreatEffectCount(Long.parseLong(getTemplate().getStringSerializer()
.deserialize(value.get(4))));
studentCommentCountDO.setTreatEffectScores(Long.parseLong(getTemplate().getStringSerializer()
.deserialize(value.get(5))));
studentCommentCountDO.setWaitingTimeScores(Long.parseLong(getTemplate().getStringSerializer()
.deserialize(value.get(6))));
return studentCommentCountDO;
}
return null;
}
});
}
  这个存和取的过程其实是把对象中的各个字段序列化之后存入到hashmap 、取出来的时候在进行按照存入进去的顺序进行取出。
  第三 清除
  这个就根据前面的前缀很简单了,一句代码就搞定啦!

[java] view plaincopyprint?






  • private void clear(String pattern) {  
  •        StringRedisTemplate template = getTemplate();  
  •        Set<String> keys = template.keys(pattern);  
  •        if (!keys.isEmpty()) {  
  •            template.delete(keys);  
  •        }  
  •    }  



private void clear(String pattern) {
StringRedisTemplate template = getTemplate();
Set<String> keys = template.keys(pattern);
if (!keys.isEmpty()) {
template.delete(keys);
}
}
  pattern传入为student: 就可以将该类型的所有缓存清除掉喽!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315827-1-1.html 上篇帖子: redis 学习笔记4--sortset 下篇帖子: redis window下安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表