redisUtil
来源:互联网 发布:网络十大神神兽为什么 编辑:程序博客网 时间:2024/06/09 19:07
1:准备
private static final Logger LOGGER = LoggerFactory.getLogger(ShardedRedisUtil.class);private static final String DEFAULT_REDIS_SEPARATOR = ";";private static final String HOST_PORT_SEPARATOR = ":";private ShardedJedisPool shardedJedisPool = null;private static final ShardedRedisUtil INSTANCE = new ShardedRedisUtil();private ShardedRedisUtil() { initialShardedPool();}private void initialShardedPool() { // 操作超时时间,默认2秒 int timeout = NumberUtils.toInt(SharedRedisConfig.getConfigProperty("redis.timeout"), 2000); // jedis池最大连接数总数,默认8 int maxTotal = NumberUtils.toInt(SharedRedisConfig.getConfigProperty("redis.jedisPoolConfig.maxTotal"), 8); // jedis池最大空闲连接数,默认8 int maxIdle = NumberUtils.toInt(SharedRedisConfig.getConfigProperty("redis.jedisPoolConfig.maxIdle"), 8); // jedis池最少空闲连接数 int minIdle = NumberUtils.toInt(SharedRedisConfig.getConfigProperty("redis.jedisPoolConfig.minIdle"), 0); // jedis池没有对象返回时,最大等待时间单位为毫秒 long maxWaitMillis = NumberUtils.toLong(SharedRedisConfig.getConfigProperty("redis.jedisPoolConfig.maxWaitTime"), -1); // 在borrow一个jedis实例时,是否提前进行validate操作 boolean testOnBorrow = Boolean.parseBoolean(SharedRedisConfig.getConfigProperty("redis.jedisPoolConfig.testOnBorrow")); // 设置jedis连接池配置 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(maxTotal); poolConfig.setMaxIdle(maxIdle); poolConfig.setMinIdle(minIdle); poolConfig.setMaxWaitMillis(maxWaitMillis); poolConfig.setTestOnBorrow(testOnBorrow); // 取得redis的url String redisUrls = SharedRedisConfig.getConfigProperty("redis.jedisPoolConfig.urls"); if (redisUrls == null || redisUrls.trim().isEmpty()) { throw new IllegalStateException("the urls of redis is not configured"); } LOGGER.info("the urls of redis is {}", redisUrls); // 生成连接池 List<JedisShardInfo> shardedPoolList = new ArrayList<JedisShardInfo>(); for (String redisUrl : redisUrls.split(DEFAULT_REDIS_SEPARATOR)) { String[] redisUrlInfo = redisUrl.split(HOST_PORT_SEPARATOR); JedisShardInfo Jedisinfo = new JedisShardInfo(redisUrlInfo[0], Integer.parseInt(redisUrlInfo[1]), timeout); shardedPoolList.add(Jedisinfo); } // 构造池 this.shardedJedisPool = new ShardedJedisPool(poolConfig, shardedPoolList, Hashing.MURMUR_HASH);}public static ShardedRedisUtil getInstance() { return INSTANCE;}
2:执行函数
/*** 实现jedis连接的获取和释放,具体的redis业务逻辑由executor实现* * @param executor RedisExecutor接口的实现类* @return*/public <T> T execute(String key, ShardedRedisExecutor<T> executor) { ShardedJedis jedis = shardedJedisPool.getResource(); T result = null; try { result = executor.execute(jedis); } finally { if (jedis != null) { jedis.close(); } } return result;}
3:设置
public String set(final String key, final String value) { return execute(key, new ShardedRedisExecutor<String>() { @Override public String execute(ShardedJedis jedis) { return jedis.set(key, value); } });}public String set(final String key, final String value, final String nxxx, final String expx, final long time) { return execute(key, new ShardedRedisExecutor<String>() { @Override public String execute(ShardedJedis jedis) { return jedis.set(key, value, nxxx, expx, time); } });}public String get(final String key) { return execute(key, new ShardedRedisExecutor<String>() { @Override public String execute(ShardedJedis jedis) { return jedis.get(key); } });}public Boolean exists(final String key) { return execute(key, new ShardedRedisExecutor<Boolean>() { @Override public Boolean execute(ShardedJedis jedis) { return jedis.exists(key); } });}public Long setnx(final String key, final String value) { return execute(key, new ShardedRedisExecutor<Long>() { @Override public Long execute(ShardedJedis jedis) { return jedis.setnx(key, value); } });}public String setex(final String key, final int seconds, final String value) { return execute(key, new ShardedRedisExecutor<String>() { @Override public String execute(ShardedJedis jedis) { return jedis.setex(key, seconds, value); } });}
4:操作
public Long expire(final String key, final int seconds) { return execute(key, new ShardedRedisExecutor<Long>() { @Override public Long execute(ShardedJedis jedis) { return jedis.expire(key, seconds); } });}public Long incr(final String key) { return execute(key, new ShardedRedisExecutor<Long>() { @Override public Long execute(ShardedJedis jedis) { return jedis.incr(key); } });}public Long decr(final String key) { return execute(key, new ShardedRedisExecutor<Long>() { @Override public Long execute(ShardedJedis jedis) { return jedis.decr(key); } });}public Long hset(final String key, final String field, final String value) { return execute(key, new ShardedRedisExecutor<Long>() { @Override public Long execute(ShardedJedis jedis) { return jedis.hset(key, field, value); } });}public String hget(final String key, final String field) { return execute(key, new ShardedRedisExecutor<String>() { @Override public String execute(ShardedJedis jedis) { return jedis.hget(key, field); } });}public String hmset(final String key, final Map<String, String> hash) { return execute(key, new ShardedRedisExecutor<String>() { @Override public String execute(ShardedJedis jedis) { return jedis.hmset(key, hash); } });}public List<String> hmget(final String key, final String... fields) { return execute(key, new ShardedRedisExecutor<List<String>>() { @Override public List<String> execute(ShardedJedis jedis) { return jedis.hmget(key, fields); } });}public Long del(final String key) { return execute(key, new ShardedRedisExecutor<Long>() { @Override public Long execute(ShardedJedis jedis) { return jedis.del(key); } });}public Map<String, String> hgetAll(final String key) { return execute(key, new ShardedRedisExecutor<Map<String, String>>() { @Override public Map<String, String> execute(ShardedJedis jedis) { return jedis.hgetAll(key); } });}public void destroy() { this.shardedJedisPool.close();}
5:ShardedRedisExecutor接口
// redis具体逻辑接口public interface ShardedRedisExecutor<T> { T execute(ShardedJedis jedis);}
6:配置类
public class SharedRedisConfig { private static final String DEFAULT_REDIS_PROPERTIES = "shardedRedis"; private static ResourceBundle REDIS_CONFIG = ResourceBundle.getBundle(DEFAULT_REDIS_PROPERTIES); public static String getConfigProperty(String key) { return REDIS_CONFIG.getString(key); }}
7:shardedRedis.properties配置文件
# 操作超时时间,默认2秒redis.timeout=3000# redis url接口以";"分割多个地址redis.jedisPoolConfig.urls=pbasadvw02.rmz.gomo.com:8878# jedis池最大连接数总数,默认8redis.jedisPoolConfig.maxTotal=8# jedis池最大空闲连接数,默认8redis.jedisPoolConfig.maxIdle=8#jedis池最少空闲连接数redis.jedisPoolConfig.minIdle=3# jedis池没有对象返回时,最大等待时间单位为毫秒redis.jedisPoolConfig.maxWaitTime=60000# 在borrow一个jedis实例时,是否提前进行validate操作redis.jedisPoolConfig.testOnBorrow=true
阅读全文
0 0
- RedisUtil
- RedisUtil
- redisUtil
- redisUtil
- redisUtil
- redisUtil
- RedisUtil工具类
- RedisUtil(哨兵模式)
- RedisUtil工具类
- RedisUtil 工具类
- RedisUtil 工具类
- 封装的RedisUtil工具类
- redisutil spring session 响应创建和摧毁
- Redis连接池工具类(RedisUtil )
- RedisUtil工具类,Java单例模式实现
- Python 边做边学 8.7 工具类--缓存工具(RedisUtil)
- java操作Redis数据库的redis工具,RedisUtil,jedis工具JedisUtil,JedisPoolUtil
- java鬼混笔记:redis 3、java下使用redis,自定义一个工具类RedisUtil
- Jvm 运行时数据区域详解
- scrapy xpath
- HDU 1175 连连看(dfs)
- javascript将时间戳转化为Date格式
- A
- redisUtil
- PHP之Linux(十)计划任务与备份策略
- 基于Gitlab CI搭建持续集成环境
- 一起学Java_面向对象(3)
- 视图
- 关于事件
- HDU 3074 Multiply game(线段树 单点更新)
- 操作hdfs 出现Unable to load native-hadoop library for your platform...
- 如何开发正确的、精致的、高效的程序