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

[经验分享] redis客户端与spring整合

[复制链接]

尚未签到

发表于 2016-12-19 10:12:04 | 显示全部楼层 |阅读模式
  redis配置文件
  ##redis
#IP\u5730\u5740
redis.pool.host=localhost
#\u7AEF\u53E3\u53F7
redis.pool.port=6379 
#redis.pool.pass=123456 
#\u6700\u5927\u80FD\u591F\u4FDD\u6301idel\u72B6\u6001\u7684\u5BF9\u8C61\u6570 
redis.pool.maxIdle=300
#\u6700\u5927\u5206\u914D\u7684\u5BF9\u8C61\u6570  
redis.pool.maxTotal=600
#\u591A\u957F\u65F6\u95F4\u68C0\u67E5\u4E00\u6B21\u8FDE\u63A5\u6C60\u4E2D\u7A7A\u95F2\u7684\u8FDE\u63A5
redis.pool.timeBetweenEvictionRunsMillis=30000 
#\u7A7A\u95F2\u8FDE\u63A5\u591A\u957F\u65F6\u95F4\u540E\u4F1A\u88AB\u6536\u56DE
redis.pool.minEvictableIdleTimeMillis=30000
#\u5F53\u8C03\u7528borrow Object\u65B9\u6CD5\u65F6\uFF0C\u662F\u5426\u8FDB\u884C\u6709\u6548\u6027\u68C0\u67E5 
redis.pool.testOnBorrow=true
########reids\u7F16\u7801\u683C\u5F0F
redis.encode=utf-8
######\u7F13\u5B58\u8FC7\u671F\u65F6\u95F4 \u79D2  1000*60*60*24*7 \u4E03\u5929
redis.expire=604800000
####\u662F\u5426\u5F00\u542FRedis\u670D\u52A1\u5E94\u7528
redis.unlock=false
  spring 配置文件
  <!-- Redis缓存配置 -->
    <bean id="jedisConnFactory"
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName"><value>${redis.pool.host}</value></property>
        <property name="port"><value>${redis.pool.port}</value> </property>
        <property name="poolConfig" ref="jedisPoolConfig" />
    </bean>
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
        p:connection-factory-ref="jedisConnFactory" />
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxActive"><value>${redis.pool.maxTotal}</value></property>
        <property name="maxIdle"><value>${redis.pool.maxIdle}</value></property>
        <property name="timeBetweenEvictionRunsMillis"><value>${redis.pool.timeBetweenEvictionRunsMillis}</value></property>
        <property name="minEvictableIdleTimeMillis"><value>${redis.pool.minEvictableIdleTimeMillis}</value></property>
        <property name="testOnBorrow" ><value>${redis.pool.testOnBorrow}</value></property>
    </bean>
   
代码实现
1.保存——HMSET
 

Java代码   DSC0000.png


  • @Override  
  • public void save(final User user) {  
  •     redisTemplate.execute(new RedisCallback<Object>() {  
  •         @Override  
  •         public Object doInRedis(RedisConnection connection)  
  •                 throws DataAccessException {  
  •             byte[] key = redisTemplate.getStringSerializer().serialize(  
  •                     "uc.user.info.uid." + user.getUid());  
  •             BoundHashOperations<Serializable, byte[], byte[]> boundHashOperations = redisTemplate  
  •                     .boundHashOps(key);  
  •             boundHashOperations.put(redisTemplate.getStringSerializer()  
  •                     .serialize("mobile"), redisTemplate  
  •                     .getStringSerializer().serialize(user.getMobile()));  
  •             boundHashOperations.put(redisTemplate.getStringSerializer()  
  •                     .serialize("address"), redisTemplate  
  •                     .getStringSerializer().serialize(user.getAddress()));  
  •             boundHashOperations.put(redisTemplate.getStringSerializer()  
  •                     .serialize("postCode"), redisTemplate  
  •                     .getStringSerializer().serialize(user.getPostCode()));  
  •             connection.hMSet(key, boundHashOperations.entries());  
  •             return null;  
  •         }  
  •     });  
  • }  

这里用到:

 

Java代码  


  • BoundHashOperations<Serializable, byte[], byte[]> boundHashOperations = redisTemplate.boundHashOps(key);  
  • boundHashOperations.put(redisTemplate.getStringSerializer().serialize("mobile"), redisTemplate.getStringSerializer().serialize(user.getMobile()));  

 看着就有点肿。。。Map封装完以后,用HMSET命令:

 

Java代码  


  • connection.hMSet(key, boundHashOperations.entries());  

 这时候就完成了哈希表的保存操作,可以在控制台看到相应的数据了。

 

redis 127.0.0.1:6379> hmget uc.user.info.uid.u123456 address mobile postCode
1) "\xe4\xb8\x8a\xe6\xb5\xb7"
2) "13800138000"
3) "100859"
 

2.获取——HMGET
这一刻,我彻底崩溃了!取出来的值是个List,还得根据取得顺序,逐个反序列化,得到内容。

 

Java代码  


  • @Override  
  • public User read(final String uid) {  
  •     return redisTemplate.execute(new RedisCallback<User>() {  
  •         @Override  
  •         public User doInRedis(RedisConnection connection)  
  •                 throws DataAccessException {  
  •             byte[] key = redisTemplate.getStringSerializer().serialize(  
  •                     "uc.user.info.uid." + uid);  
  •             if (connection.exists(key)) {  
  •                 List<byte[]> value = connection.hMGet(  
  •                         key,  
  •                         redisTemplate.getStringSerializer().serialize(  
  •                                 "address"),  
  •                         redisTemplate.getStringSerializer().serialize(  
  •                                 "mobile"), redisTemplate  
  •                                 .getStringSerializer()  
  •                                 .serialize("postCode"));  
  •                 User user = new User();  
  •                 String address = redisTemplate.getStringSerializer()  
  •                         .deserialize(value.get(0));  
  •                 user.setAddress(address);  
  •                 String mobile = redisTemplate.getStringSerializer()  
  •                         .deserialize(value.get(1));  
  •                 user.setMobile(mobile);  
  •                 String postCode = redisTemplate.getStringSerializer()  
  •                         .deserialize(value.get(2));  
  •                 user.setPostCode(postCode);  
  •                 user.setUid(uid);  
  •   
  •                 return user;  
  •             }  
  •             return null;  
  •         }  
  •     });  
  • }  

 这个实现,跟Redis的命令几乎一模一样,指定Key,指定field,获取其值。

 

Java代码  


  • List<byte[]> value = connection.hMGet(key,redisTemplate.getStringSerializer().serialize("address"),  
  • redisTemplate.getStringSerializer().serialize("mobile"),   
  • redisTemplate.getStringSerializer().serialize("postCode"));  

 

Java代码  


  • User user = new User();  
  • String address = redisTemplate.getStringSerializer().deserialize(value.get(0));  
  • user.setAddress(address);  
  • String mobile = redisTemplate.getStringSerializer().deserialize(value.get(1));  
  • user.setMobile(mobile);  
  • String postCode = redisTemplate.getStringSerializer().deserialize(value.get(2));  
  • user.setPostCode(postCode); 

运维网声明 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-316298-1-1.html 上篇帖子: redis持久化rdb aof简介 下篇帖子: redis与spring的完全集成
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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