简单的redis工具类
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class RedisUtils {
// Redis服务器IP
private static String ADDR = "localhost";
// Redis的端口号
private static int PORT = 6379;
// 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
// private static String AUTH = "123456";
// 可用连接实例的最大数目,默认值为8;
private static int MAX_TOTAL = 512;
// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
private static int MAX_IDLE = 50;
// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。
private static int MAX_WAIT = -1;
private static int TIMEOUT = 100000;
// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
private static boolean TEST_ON_BORROW = true;
private static JedisPool jedisPool = null;
private static List<JedisShardInfo> shards = null;
private static ShardedJedisPool shardedJedisPool = null;
private static Object lock = new Object();
public static void setADDR(String aDDR, int port) {
ADDR = aDDR;
PORT = port;
}
private static Logger log = Logger.getLogger(RedisUtils.class);
/**
* 初始化Redis连接池
*/
private static void initJedisPool() {
synchronized (lock) {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_TOTAL);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT);
} catch (Exception e) {
log.error("initJedisPool出错:" + e);
}
}
}
private static void initShardedJedisPool() {
synchronized (lock) {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_TOTAL);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
JedisShardInfo info = new JedisShardInfo(ADDR, PORT);
info.setTimeout(TIMEOUT);
shards = Arrays.asList(info);
shardedJedisPool = new ShardedJedisPool(config, shards);
} catch (Exception e) {
log.error("initShardedJedisPool出错:" + e);
}
}
}
/**
* 获取shardedJedis实例
* @return
*/
public static ShardedJedis getShardedJedis() {
try {
if (shardedJedisPool == null) {
initShardedJedisPool();
}
ShardedJedis jedis = shardedJedisPool.getResource();
return jedis;
} catch (Exception e) {
log.error("getShardedJedis出错:" + e);
return null;
}
}
/**
* 释放shardedJedis资源
* @param jedis
*/
public static void returnShardedResource(final ShardedJedis jedis) {
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
/**
* 获取Jedis实例
* @return
*/
public static Jedis getJedis() {
try {
if (jedisPool == null) {
initJedisPool();
}
Jedis jedis = jedisPool.getResource();
return jedis;
} catch (Exception e) {
log.error("getJedis出错:" + e);
return null;
}
}
/**
* 释放jedis资源
* @param jedis
*/
public static void returnResource(final Jedis jedis) {
if (jedis != null) {
jedisPool.returnResource(jedis);
}
}
/**
* 根据key值来获取对应的数据
* @param key
* @return
*/
public static String getString(final String key) {
String result = "";
try (Jedis jedis = getJedis()) {
if (StringUtils.isEmpty(key)) {
return result;
}
result = jedis.get(key);
} catch (Exception e) {
log.error("get String fail", e);
}
return result;
}
/**
* 设置缓存
* @param key
* @param values
*/
public static void setString(final String key, final String values) {
try (Jedis jedis = getJedis()) {
if (StringUtils.isEmpty(key)) {
return;
}
jedis.set(key, values);
} catch (Exception e) {
log.error("set String fail", e);
}
}
/**
* 根据key值来删除缓存
* @param key
* @return
*/
public static long delKey(final String key) {
long result = 0;
try (Jedis jedis = getJedis()) {
if (StringUtils.isEmpty(key)) {
return result;
}
result = jedis.del(key);
} catch (Exception e) {
log.error("del key fail", e);
}
return result;
}
/**
* 生成key genKey
* @param projectId
* @param module
* @param unit
* @return String
*/
public static String genKey(String projectId, String module, String unit) {
StringBuilder builder = new StringBuilder();
builder.append(unit);
builder.append("_");
builder.append(module);
builder.append(projectId);
return builder.toString();
}
/**
* 设置键值 setString
* @param key
* @param values
* @param seconds
*/
public static void setString(final String key, final String values, final int seconds) {
try (Jedis jedis = getJedis()) {
if (StringUtils.isEmpty(key)) {
return;
}
jedis.setex(key, seconds, values);
} catch (Exception e) {
log.error("set String and expire fail ", e);
}
}
public synchronized static void deleteKey(String... keys) {
try (Jedis jedis = getJedis()) {
jedis.del(keys);
} catch (Exception e) {
log.error("delete key[] fail ", e);
}
}
public synchronized static void deleteKeys(String pattern) {
try (Jedis jedis = getJedis()) {
Set<String> keySet = jedis.keys(pattern);
if (keySet == null || keySet.size() <= 0) {
return;
}
String keyArr[] = new String[keySet.size()];
int i = 0;
for (String keys : keySet) {
keyArr[i] = keys;
i++;
}
deleteKey(keyArr);
} catch (Exception e) {
log.error("delete keys by pattern fail ", e);
}
}
public synchronized static void deleteKeyByPrefix(String prefix) {
deleteKeys(prefix + "*");
}
public synchronized static void deleteKeyByContain(String contain) {
deleteKeys("*" + contain + "*");
}
}
简单的redis工具类的更多相关文章
- Redis 工具类 java 实现的redis 工具类
最近了解了一下非关系型数据库 redis 会使用简单的命令 在自己本地电脑 使用时必须先启动服务器端 在启动客户端 redis 简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
- redis 工具类 单个redis、JedisPool 及多个redis、shardedJedisPool与spring的集成配置
http://www.cnblogs.com/edisonfeng/p/3571870.html http://javacrazyer.iteye.com/blog/1840161 http://ww ...
- SpringBoot整合Redis及Redis工具类撰写
SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...
- redistemplate优雅地操作redis redis 工具类
参考:https://www.cnblogs.com/superfj/p/9232482.html redis 工具类 package com.service; import org.springfr ...
- java的redis工具类
package com.mracale.sell.utils; /** * @Auther: Mracale */ import org.springframework.beans.factory.a ...
- Redis 工具类
项目里的Redis 工具类,写下来以备后用 public class RedisConnector { public class RedisParseResult<T> { public ...
- Java操作Redis工具类
依赖 jar 包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...
随机推荐
- #001 CSS快速入门讲解
CSS入门讲解 HTML人+CSS衣服+JS动作=>DHTML CSS: 层叠样式表 CSS2.0 和 CSS3.0 版本,目前学习CSS2, CSS3只是多了一些样式出来而已 CSS 干啥用的 ...
- PHP SPL神器实现堆排序
之前学习过内部排序的八大算法,也一一写过代码实现.其中堆排序的原理是 将一颗二叉树初始化为堆 依次将最后一个结点与堆顶结点交换.然后调整堆顶元素位置,重置堆. 将二叉树初始化为堆可以看做从最后一个非叶 ...
- CSS盒子模型之CSS3可伸缩框属性(Flexible Box)
CSS盒子模型(下) 一.CSS3可伸缩框(Flexible Box) 可伸缩框属性(Flexible Box)是css3新添加的盒子模型属性,有人称之为弹性盒模型,它的出现打破了我们经常使用的浮动布 ...
- BZOJ2435:[NOI2011]道路修建 (差分)
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- P3935 Calculating
题目描述 若xx分解质因数结果为\(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}\),令\(f(x)=(k_1+1)(k_2+1)\cdots (k_n+1)\),求\(\ ...
- C# winform webbrowser如何指定内核为IE11?
1)假设你应用程序的名字为MyApplication.exe 2)运行Regedit,打开注册表,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsof ...
- error:Assertion failed ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at
问题原因: 访问像素时指针越界造成的 解决办法: 1.检查指针下标是否正确 2.row和col是否写反了
- http协议中的keeplive是做什么的?它的适应场景是什么?
1.Http底层也是通过TCP传输的. 2.HTTP keep-alive Http是一个”请求-响应”协议,它的keep-alive主要是为了让多个http请求共享一个Tcp连接,以避免每个Http ...
- 视频直播时的QoS策略
一.如何判断当前的网络状况 可以以发送一帧视频数据的时间为依据,判断当前网络拥塞情况. 网络中出现丢包和抖动,导致接收端接收数据超时,会激发发送端数据重传,重传机制本身挤占网络带宽,导致send ...
- helm-locate 使用 everything
emacs里不需任何设置,只要在电脑的环境变量里加上everything的目录即可. 1.下载es.exe (http://www.voidtools.com/es.zip) 2.把解压出的es.ex ...