private static Logger log = Logger.getLogger(RedisTool.class); private static JedisPool pool = null; /** * 构建redis连接池 * * @param ip * @param port * @return JedisPool */ public static JedisPool getPool() { if (pool == null) { JedisPoolConfig config = new JedisPoolConfig(); // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 config.setMaxActive(20); // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。 config.setMaxIdle(5); // 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException; config.setMaxWait(1000 * 100); // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; config.setTestOnBorrow(true); pool = new JedisPool(config, SystemContent.REDIS_HOST,SystemContent.REDIS_PORT); } return pool; } /** * 返还到连接池 * * @param pool * @param redis */ public static void returnResource(JedisPool pool, Jedis redis) { if (redis != null) { pool.returnResource(redis); } } /** * 获取数据 * * @param key * @return */ public static String get(String key) { String value = null; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); value = jedis.get(key); } catch (Exception e) { // 释放redis对象 pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { // 返还到连接池 returnResource(pool, jedis); } return value; } /** * String 类型的计数器 */ public static void set(String key,String value){ JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); jedis.set(key, value); } catch (Exception e) { // 释放redis对象 pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { // 返还到连接池 returnResource(pool, jedis); } } /** * List 移除并返回列表 key的头元素(最左边)。 */ public static String lPop(String key){ JedisPool pool = null; Jedis jedis = null; String value = null; try { pool = getPool(); jedis = pool.getResource(); value = jedis.lpop(key); } catch (Exception e) { log.error(" lPop is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); }finally{ // 返还到连接池 returnResource(pool, jedis); } return value; } /** * List 移除并返回列表 key的尾元素(最右边)。 */ public static String rPop(String key){ JedisPool pool = null; Jedis jedis = null; String value = null; try { pool = getPool(); jedis = pool.getResource(); value = jedis.rpop(key); } catch (Exception e) { log.error(" rPop is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); }finally{ // 返还到连接池 returnResource(pool, jedis); } return value; } /** * List 将一个或多个值 value 插入到列表 key 的表尾(最右边) */ public static long rPush(String key,String...strings){ long count = 0; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); count = jedis.rpush(key, strings); } catch (Exception e) { log.error(" rPush is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); } finally { // 返还到连接池 returnResource(pool, jedis); } return count; } /** * List 将一个或多个值 value 插入到列表 key 的头尾(最左边) */ public static long lPush(String key,String...strings){ long count = 0; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); count = jedis.lpush(key, strings); } catch (Exception e) { log.error(" lPush is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); } finally { // 返还到连接池 returnResource(pool, jedis); } return count; } /** * List 根据key获取list */ public static List<String> getList(String key){ List<String> list = null; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); list = jedis.lrange(key, 0, -1); } catch (Exception e) { log.error(" getList is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); } finally { // 返还到连接池 returnResource(pool, jedis); } return list; } /** * Hash 根据key获取hash */ public static Map<String,String> getHash(String key){ Map<String,String> map = new HashMap<String,String>(); JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); map = jedis.hgetAll(key); } catch (Exception e) { log.error(" getHash is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); } finally{ // 返还到连接池 returnResource(pool,jedis); } return map; } /** * Hash 同时将多个 field-value (域-值)对设置到哈希表 key 中 */ public static String hmSet(String key,Map<String,String> hash){ String result = ""; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); result = jedis.hmset(key, hash); } catch (Exception e) { log.error(" hmSet is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); } finally{ // 返还到连接池 returnResource(pool,jedis); } return result; } /** * * 设置单个fileld-value(域-值)到哈希表中 */ public static long hset(String key,String field,String value){ long result = 0; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); result = jedis.hset(key, field, value); } catch (Exception e) { log.error(" hmSet is error : "+ e.getMessage()); // 释放redis对象 pool.returnBrokenResource(jedis); } finally{ // 返还到连接池 returnResource(pool,jedis); } return result; }
相关推荐
Java基于Redis实现分布式锁代码实例 分布式锁的必要性 在多线程环境中,资源竞争是一个常见的问题。例如,在一个简单的用户操作中,一个线程修改用户状态,首先在内存中读取用户状态,然后在内存中进行修改,然后...
为了在Java代码中选择Redis的特定数据库,你需要在`RedisTemplate`上设置数据库索引。Redis默认有16个数据库,可以通过`setDatabase`方法指定: ```java @Bean public RedisTemplate, Object> redisTemplate...
在Java环境中与Redis进行交互,通常会使用Jedis或Lettuce等客户端库。本文将详细讲解如何使用Java调用Redis,并探讨相关知识点。 一、Jedis库的使用 1. 添加依赖:在你的`pom.xml`文件中添加Jedis的Maven依赖: ``...
本篇文章将详细探讨如何通过Java代码实现Redis与Spring的整合,并介绍相关的操作,如增删改查、列表操作以及批量操作,以提高性能。 首先,要集成Redis到Spring项目中,我们需要在项目的`pom.xml`文件中添加Redis的...
读书笔记:Redis实战 Java代码实现
通过以上步骤,我们可以实现Java对Redis数据的导入和导出。这不仅可以帮助我们在不同服务器间迁移数据,还可以用于备份和恢复,确保系统的稳定性和数据安全性。在实际应用中,应根据具体需求进行适当的调整和优化。
Java利用Redis实现消息队列的示例代码 以下是Java利用Redis实现消息队列的示例代码的知识点总结: 一、序列化 * 序列化是将对象转换为byte数组的过程,Java中可以使用ByteArrayOutputStream和...
在本文中,我们将深入探讨如何使用Java和Redis的有序集合(Zset)来实现一个排行榜功能。Redis是一个高性能的键值存储系统,它的有序集合数据结构非常适合用来构建排行榜,因为可以方便地进行分数排序和成员操作。 ...
最后,"代码"目录下应包含实际的Java代码示例,可以参考和学习。 在实际开发中,一个良好的Redis工具类通常会封装这些基础操作,提供更友好的API,例如批量操作、连接池管理、异常处理等。工具类的设计应考虑线程...
以下是一个简单的Java代码示例,展示了如何创建发布者并发布消息到Redis频道: ```java import redis.clients.jedis.Jedis; public class RedisPublisher { public static void main(String[] args) { // 创建...
这本书通过丰富的实例和Java代码来解释Redis的各种功能,帮助开发者更好地理解和应用Redis。然而,提供的压缩包中并未包含第三章的Java代码,可能是因为该部分的内容涉及到特定的话题或者在其他资源中单独提供。 ...
本书“Redis实战”是针对这一技术的深入学习资料,配合Java源代码,可以帮助开发者更好地理解和应用Redis。 Redis的核心特性包括: 1. **数据类型**:Redis支持多种数据结构,如字符串(String)、哈希(Hash)、列表...
Redis 是一个高性能的键值对数据存储系统,常被用作...通过以上知识点,我们可以编写出高效、可靠的Java代码来利用Redis进行数据缓存。在实践中,还需要根据具体业务场景进行优化和调整,以最大化Redis的性能优势。
使用这些库,开发者可以方便地在Java应用中存取Redis数据,实现缓存、会话管理、消息传递等功能。例如,通过Jedis的`set()`方法设置键值,`get()`方法获取键对应的值,`lpush()`和`rpop()`操作列表,`hset()`和`hget...
本篇文章将深入探讨如何在Java中使用Redis进行分页操作,并提供相关代码示例。 首先,你需要在项目中引入Jedis或Lettuce这两个常用的Java Redis客户端库。Jedis是较早的库,适合小型项目,而Lettuce则更现代,支持...
简单来说就是用java实现远程操作redis,ip地址要找到自己linux上连网后的ip地址,在每个case文件中修改后就可以实现了,对应的test文件是实现操作文件,你可以自己写一个主程序把他们包括起来。哦,对了这里面包括了...
启动Redis服务器后,我们就可以通过Java代码连接到它。以下是一个简单的连接示例: ```java import redis.clients.jedis.Jedis; public class RedisDemo { public static void main(String[] args) { Jedis ...
结合提供的"redis实战源码",你可以深入研究实际项目中如何集成和使用Redis与Java进行交互,了解在不同场景下如何优化性能和代码结构。通过学习这些源码,你可以更好地理解Redis在Java应用程序中的工作原理,提升你...
总结,通过使用Java的Jedis库,我们可以轻松地实现对Redis的String、List和Map的操作。通过封装和单元测试,可以提高代码的可维护性和可靠性。在实际项目中,还可以考虑使用更高级的客户端如Lettuce,以及Spring ...
在本文中,我们将深入探讨如何搭建Redis集群,以及如何在Java中使用Jedis客户端进行集群操作。 首先,让我们了解Redis集群的基本概念。Redis集群通过数据分片(Sharding)来分散数据,每个节点存储一部分数据。集群...