package com.commons.redis.cache;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class RedisManager {
/** 切片链接池 */
private static ShardedJedisPool shardedJedisPool;
private ShardedJedis shardedJedis;
// 设置与缓存服务器的连接池
static {
// 池基本配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(Integer.parseInt(Config
.getProperty("redis.pool.maxActive")));
config.setMaxIdle(Integer.parseInt(Config
.getProperty("redis.pool.maxIdle")));
config.setMaxWait(Integer.parseInt(Config
.getProperty("redis.pool.maxWait")));
config.setTestOnBorrow(true);
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
// 服务器列表
String[] addressArr = (Config.getProperty("redis.address")).split(",");
for (String str : addressArr) {
String []addressConfig = str.split(":");
shards.add(new JedisShardInfo(addressConfig[0], Integer
.parseInt(addressConfig[1]), addressConfig[2]));
}
// 构造池
shardedJedisPool = new ShardedJedisPool(config, shards);
}
/**
* redis的List集合 ,向key这个list添加元素
*
* @param key
* List别名
* @param string
* 元素
* @return
*/
public long rpush(String key, String string) {
try {
shardedJedis = shardedJedisPool.getResource();
long ret = shardedJedis.rpush(key, string);
shardedJedisPool.returnResource(shardedJedis);
return ret;
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
return 0L;
}
}
/**
* 获取key这个List,从第几个元素到第几个元素 LRANGE key start
* stop返回列表key中指定区间内的元素,区间以偏移量start和stop指定。
* 下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。
* 也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
*
* @param key
* List别名
* @param start
* 开始下标
* @param end
* 结束下标
* @return
*/
public List<String> lrange(String key, long start, long end) {
try {
shardedJedis = shardedJedisPool.getResource();
List<String> ret = shardedJedis.lrange(key, start, end);
shardedJedisPool.returnResource(shardedJedis);
return ret;
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
return null;
}
}
/**
* 将哈希表key中的域field的值设为value。
*
* @param key
* 哈希表别名
* @param field键
* @param value
* 值
*/
public void hset(String key, String field, String value) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.hset(key, field, value);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
}
}
/**
* 向key赋值
*
* @param key
* @param value
*/
public void set(String key, String value) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.set(key, value);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
}
}
/**
* 获取key的值
*
* @param key
* @return
*/
public String get(String key) {
try {
shardedJedis = shardedJedisPool.getResource();
String value = shardedJedis.get(key);
shardedJedisPool.returnResource(shardedJedis);
return value;
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
return null;
}
}
/**
* 将多个field - value(域-值)对设置到哈希表key中。
*
* @param key
* @param map
*/
public void hmset(String key, Map<String, String> map) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.hmset(key, map);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
}
}
/**
* 给key赋值,并生命周期设置为seconds
*
* @param key
* @param seconds
* 生命周期 秒为单位
* @param value
*/
public void setex(String key, int seconds, String value) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.setex(key, seconds, value);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
}
}
/**
* 为给定key设置生命周期
*
* @param key
* @param seconds
* 生命周期 秒为单位
*/
public void expire(String key, int seconds) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.expire(key, seconds);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null)
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
}
}
/**
* 检查key是否存在
*
* @param key
* @return
*/
public boolean exists(String key) {
try {
shardedJedis = shardedJedisPool.getResource();
boolean bool = shardedJedis.exists(key);
shardedJedisPool.returnResource(shardedJedis);
return bool;
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
return false;
}
}
/**
* 返回key值的类型 none(key不存在),string(字符串),list(列表),set(集合),zset(有序集),hash(哈希表)
*
* @param key
* @return
*/
public String type(String key) {
try {
shardedJedis = shardedJedisPool.getResource();
String type = shardedJedis.type(key);
shardedJedisPool.returnResource(shardedJedis);
return type;
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
return null;
}
}
/**
* 从哈希表key中获取field的value
*
* @param key
* @param field
*/
public String hget(String key, String field) {
try {
shardedJedis = shardedJedisPool.getResource();
String value = shardedJedis.hget(key, field);
shardedJedisPool.returnResource(shardedJedis);
return value;
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
return null;
}
}
/**
* 返回哈希表key中,所有的域和值
*
* @param key
* @return
*/
public Map<String, String> hgetAll(String key) {
try {
shardedJedis = shardedJedisPool.getResource();
Map<String, String> map = shardedJedis.hgetAll(key);
shardedJedisPool.returnResource(shardedJedis);
return map;
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
return null;
}
}
/**
* 返回哈希表key中,所有的域和值
*
* @param key
* @return
*/
public Set<?> smembers(String key) {
try {
shardedJedis = shardedJedisPool.getResource();
Set<?> set = shardedJedis.smembers(key);
shardedJedisPool.returnResource(shardedJedis);
return set;
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
return null;
}
}
/**
* 移除集合中的member元素
*
* @param key
* List别名
* @param field
* 键
*/
public void delSetObj(String key, String field) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.srem(key, field);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
e.printStackTrace();
}
}
}
/**
* 判断member元素是否是集合key的成员。是(true),否则(false)
*
* @param key
* @param field
* @return
*/
public boolean isNotField(String key, String field) {
try {
shardedJedis = shardedJedisPool.getResource();
boolean bool = shardedJedis.sismember(key, field);
shardedJedisPool.returnResource(shardedJedis);
return bool;
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
return false;
}
}
/**
* 如果key已经存在并且是一个字符串,将value追加到key原来的值之后
*
* @param key
* @param value
*/
public void append(String key, String value) {
try {
shardedJedis = shardedJedisPool.getResource();
shardedJedis.append(key, value);
shardedJedisPool.returnResource(shardedJedis);
} catch (Exception e) {
if (shardedJedis != null) {
shardedJedisPool.returnBrokenResource(shardedJedis);
}
e.printStackTrace();
}
}
/**
* 获取客户端连接
*
* @return
*/
public static ShardedJedis getShardedJedis() {
try {
return shardedJedisPool.getResource();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 释放连接
*
* @param jedis
*/
public static void returnResourceObject(ShardedJedisPool shardedJedisPool) {
try {
if (shardedJedisPool != null) {
shardedJedisPool.returnResourceObject(shardedJedisPool);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 关闭 Redis
*/
public void destory() {
try {
shardedJedisPool.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.commons.redis.cache;
import java.io.File;
import java.io.InputStream;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Config {
private static Log log = LogFactory.getLog(Config.class);
private static Properties props = new Properties();
private static String contextAbsoultePath = "";
private static String contextPath = "";
private static ServletContext context;
private static InitialContext ic;
static {
InputStream in = Config.class.getResourceAsStream("/commons-pool.properties");
try {
if (in != null) {
try {
props.load(in);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getProperty(String key) {
return getProperty(key, "");
}
public static String getProperty(String key,String defaultValue) {
return props.getProperty(key, defaultValue);
}
public static String getPathProperty(String key) {
String s = props.getProperty(key, "");
s = s.replace('/', File.separator.charAt(0));
return s;
}
public static String getContextAbsoultePath() {
return contextAbsoultePath;
}
public static void setContextAbsoultePath(String contextAbsoultePath) {
Config.contextAbsoultePath = contextAbsoultePath;
}
public static String getContextPath() {
return contextPath;
}
public static void setContextPath(String contextPath) {
Config.contextPath = contextPath;
}
public static void setContext(ServletContext ctx) {
context = ctx;
}
public static ServletContext getContext() {
return context;
}
public static InitialContext getInitialContext() {
try {
if (ic == null) {
Properties p = new Properties();
p.put(
Context.INITIAL_CONTEXT_FACTORY,
getProperty("jndi.InitialContextFactory"));
p.put(Context.PROVIDER_URL, getProperty("jndi.ProviderURL"));
ic = new InitialContext(p);
}
} catch (Exception ne) {
log.fatal(ne);
}
return ic;
}
}
commons-pool.properties:
#最大分配的对象数
redis.pool.maxActive=5000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=5000
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#address[ip地址:端口号:密码]多个以英文逗号分开
redis.address=127.0.0.1:6379:rayping88
package com.commons.redis.cache;
public class RedisTest {
public static void main(String[] args) {
RedisManager redisManager =new RedisManager();
redisManager.set("ray", "redis 测试");
System.out.println(redisManager.get("ray"));
}
}
相关推荐
tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...
- 解压"redis-windows-7.2.4.zip",找到`redis-server.exe`启动文件。 - 运行`redis-server.exe`,默认情况下,Redis监听6379端口。 - 可以通过配置文件`redis.windows.conf`修改默认设置,如端口、内存限制、...
Redis是一种高性能的键值对数据存储系统,常用于数据库、缓存和消息中间件等场景。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合,以及更复杂的Geo空间索引等,使其在许多应用中具有广泛的应用性。 ...
redis-copy, 将一个redis数据库复制到另一个数据库 RedisCopy这个工具提供了一种将一个redis数据库的内容移动到另一个redis数据库的方法。 代码是由包含在redis源代码中的 redis-copy.rb 脚本插件激发的,但目标是...
django-redis-sessions, 在Redis数据库中,用于存储会话的Django 会话后端 django-redis-sessions用于你的会话的Redis数据库后端 安装工具可用设置变更日志文件安装运行 pip install django-redis-sessions 或者另外...
Redis的核心概念包括键(key)、值(value)和数据类型。键是用于标识存储内容的唯一标识符,值则是键所关联的数据。Redis支持多种数据类型,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序...
- **redis-benchmark**:性能测试工具,可以用来测量Redis的吞吐量和延迟。 - **redis-check-aof**和**redis-check-rdb**:用于检查和修复AOF文件和RDB文件的工具。 - **其他库文件和文档**:可能包含必要的库文件...
Redis-x64-3.2.100.zip是一个针对64位Windows系统的Redis服务器的压缩包,版本号为3.2.100。Redis是一个开源、高性能的键值存储系统,常被用于数据库、缓存和消息中间件的角色。它的设计目标是速度和数据持久化,...
4. `redis-benchmark.exe`:性能测试工具,用于测试Redis服务器的读写速度和并发能力,是评估Redis性能的重要手段。 5. `redis-check-dump.exe`:用于检查RDB持久化文件的工具,确保数据的完整性和一致性。 6. `...
描述中提到“Redis是一个高性能的key-value数据库”,这是对Redis核心功能的简洁概述。作为键值数据库,Redis通过键(key)来唯一标识每个数据项,并允许快速查找和操作对应的值(value)。其高性能主要来源于以下几...
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object...
3. `redis-benchmark.exe`是性能测试工具,可以用来衡量Redis服务器的读写速度和并发能力。 4. `redis-check-aof`和`redis-check-rdb`则是用于检查和修复AOF(Append Only File)和RDB(Snapshot)持久化文件的工具...
这里的 "redis-stack-server-6.2.6-v7.rhel7.x86-64.tar.gz" 文件是一个针对 Red Hat Enterprise Linux 7 (RHEL7) 平台的 64 位版本的 Redis Stack 6.2.6 包。这个压缩包包含了运行 Redis Stack 所需的所有组件,...
【标题】"tomcat-redis-session-manager jar包"是一个用于集成Redis进行Session管理的Java库,特别设计用于Apache Tomcat服务器。这个库使得在多台Tomcat服务器之间共享和协调用户的Session数据成为可能,从而提高了...
4. **其他辅助工具**:可能还包括一些诊断或管理工具,如`redis-benchmark.exe`用于性能测试,`redis-check-aof.exe`和`redis-check-dump.exe`用于检查和修复数据文件。 在Windows环境下安装Redis,首先解压"redis-...
在Windows环境下安装Redis,可以借助于提供的压缩包"redis-windows-7.2.5.zip"进行。以下是关于Redis及其在Windows上的安装和使用的详细知识: 1. **Redis特性** - **键值对存储**:Redis的核心是键值对模型,其中...
在实际开发中,可以通过阅读`redis-py-master`源代码了解其实现细节,更好地理解和优化使用Redis的方式,提升应用性能。此外,持续关注Redis的更新和`redis-py`的版本升级,以利用最新的特性和改进。
- 通过`SET key value`和`GET key`命令,可以测试Redis的基本功能。 - 为了在生产环境中使用,还需要了解如何与其他应用程序集成,例如通过连接池和适配器与编程语言如Java、Python或C#通信。 6. **管理和监控...
1. 开发者可以使用各种编程语言的Redis客户端库,如Python的`redis-py`,Java的`Jedis`等,与Redis服务器交互。 2. 设计和实现数据模型,根据业务需求选择合适的数据类型。 3. 利用Redis的事务功能保证数据操作的...