spring 结合 redis 正确从jedisConnectionFactory获取Jedis实例
来源:互联网 发布:淘宝助理 批量编辑 编辑:程序博客网 时间:2024/05/18 02:52
网上流传着这样一种spring结合redis的例子,从jedisConnectionFactory获取Jedis实例。其他部分忽略只看RedisService,这样获取jedis实例存在很多问题。
这样每次创建新的连接而没有关闭连接。在有大量操作的时候很快就会将redis的连接都占满。报redis连接错误。
package com.mkfree.redis.test;import java.util.Set;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import redis.clients.jedis.Jedis;/** * 封装redis 缓存服务器服务接口 * @author hk * * 2012-12-16 上午3:09:18 */public class RedisService { /** * 通过key删除(字节) * @param key */ public void del(byte [] key){ this.getJedis().del(key); } /** * 通过key删除 * @param key */ public void del(String key){ this.getJedis().del(key); } /** * 添加key value 并且设置存活时间(byte) * @param key * @param value * @param liveTime */ public void set(byte [] key,byte [] value,int liveTime){ this.set(key, value); this.getJedis().expire(key, liveTime); } /** * 添加key value 并且设置存活时间 * @param key * @param value * @param liveTime */ public void set(String key,String value,int liveTime){ this.set(key, value); this.getJedis().expire(key, liveTime); } /** * 添加key value * @param key * @param value */ public void set(String key,String value){ this.getJedis().set(key, value); } /**添加key value (字节)(序列化) * @param key * @param value */ public void set(byte [] key,byte [] value){ this.getJedis().set(key, value); } /** * 获取redis value (String) * @param key * @return */ public String get(String key){ String value = this.getJedis().get(key); return value; } /** * 获取redis value (byte [] )(反序列化) * @param key * @return */ public byte[] get(byte [] key){ return this.getJedis().get(key); } /** * 通过正则匹配keys * @param pattern * @return */ public Set<String> keys(String pattern){ return this.getJedis().keys(pattern); } /** * 检查key是否已经存在 * @param key * @return */ public boolean exists(String key){ return this.getJedis().exists(key); } /** * 清空redis 所有数据 * @return */ public String flushDB(){ return this.getJedis().flushDB(); } /** * 查看redis里有多少数据 */ public long dbSize(){ return this.getJedis().dbSize(); } /** * 检查是否连接成功 * @return */ public String ping(){ return this.getJedis().ping(); } /** * 获取一个jedis 客户端 * @return */ private Jedis getJedis(){ if(jedis == null){ return jedisConnectionFactory.getShardInfo().createResource(); } return jedis; } private RedisService (){ } //操作redis客户端 private static Jedis jedis; @Autowired @Qualifier("jedisConnectionFactory") private JedisConnectionFactory jedisConnectionFactory;}
而且没有应用连接池。如果我们想从jedisConnectionFactory获取Jedis实例又想使用连接池。可以这样:
private Jedis getJedis() {if (jedis == null) { jedisConnection = jedisConnectionFactory.getConnection(); jedis = jedisConnection.getNativeConnection();return jedis;}return jedis;}
这样Jedis实例就受连接池管理了。不过每次我们操作完了 必须把连接释放,放回连接池。jedisConnection.close();这个close不是真正的关闭,而是将连接放回连接池。
2 0
- spring 结合 redis 正确从jedisConnectionFactory获取Jedis实例
- redis客户端jedis连接和spring结合
- jedis操作redis,结合spring,原生方法
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis整合Spring结合使用缓存实例
- Redis + Jedis + Spring
- MO_GLOBAL - EBS R12 中 Multi Org 设计的深入研究
- 【转】Html 按钮button加超链接
- 不要浪费时间去写所谓的完美代码
- Ubuntu安装Vmware Tools后hgfs无法看到共享文件的解决方法
- 更改SVN插件用户名密码
- spring 结合 redis 正确从jedisConnectionFactory获取Jedis实例
- java正则表达式大全
- OC基础语法
- java 实现双链表
- The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory的解决方法
- Linux设置mysql远程访问
- LeetCode: Next Permutation
- UVa 10635 Prince and Princess(最大公共子序列)
- 图解Android - Zygote, System Server 启动分析