(1)Jedis配置文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd" default-lazy-init="true"> <context:component-scan base-package="com.crm.redis" /> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!--最大连接数 --> <!--不同的Common Pool 这个属性不一样 --> <property name="maxTotal" value="50" /> <!--最大空闲数 --> <property name="maxIdle" value="10" /> <property name="minIdle" value="1" /> <!--最大等待时间ms --> <property name="maxWaitMillis" value="30000" /> <property name="testOnBorrow" value="true" /> <property name="testOnReturn" value="true" /> <property name="testWhileIdle" value="true" /> </bean> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" destroy-method="destroy"> <constructor-arg ref="jedisPoolConfig" /> <constructor-arg> <list> <bean class="redis.clients.jedis.JedisShardInfo"> <constructor-arg value="202.102.83.169" /> <constructor-arg type="int" value="6379" /> <constructor-arg value="instance:01" /> </bean> <!-- <bean class="redis.clients.jedis.JedisShardInfo"> <constructor-arg value="localhost" /> <constructor-arg type="int" value="6379" /> <constructor-arg value="instance:02" /> </bean> --> </list> </constructor-arg> </bean> </beans>
(2)抽象Jedis公共DAO
package com.crm.redis; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.crm.redis.util.JedisSerializeUtil; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; @Repository("RedisDao") public class RedisDao { @Autowired private ShardedJedisPool shardedJedisPool; // ------------------------------String------------------------------ public void setString(String key, String value) { ShardedJedis jedis = shardedJedisPool.getResource(); jedis.set(key, value); shardedJedisPool.returnResource(jedis); } public String getString(String key) { ShardedJedis jedis = shardedJedisPool.getResource(); String str = jedis.get(key); shardedJedisPool.returnResource(jedis); return str; } public void delString(String key) { ShardedJedis jedis = shardedJedisPool.getResource(); jedis.del(key); shardedJedisPool.returnResource(jedis); } /** * 根据KEY追加值 (1)如果KEY存在的话,在原有值的基础上追加 (2)如果KEY不存在的话,则新增值KEY-VALUE */ public void valueAppend(String key, String appendValue) { ShardedJedis jedis = shardedJedisPool.getResource(); jedis.append(key, appendValue); shardedJedisPool.returnResource(jedis); } // ------------------------------HashMap------------------------------ /** * 根据key设置HashMap */ public void hmset(String key, Map hashMap) { ShardedJedis jedis = shardedJedisPool.getResource(); jedis.hmset(key, hashMap); shardedJedisPool.returnResource(jedis); } /** * 根据key获取Map的所有Key */ public Set<String> hkeys(String key) { ShardedJedis jedis = shardedJedisPool.getResource(); Set<String> r = jedis.hkeys(key); shardedJedisPool.returnResource(jedis); return r; } /** * 根据key获取Map的所有Value */ public List<String> hvals(String key) { ShardedJedis jedis = shardedJedisPool.getResource(); List<String> r = jedis.hvals(key); shardedJedisPool.returnResource(jedis); return r; } /** * 根据key和HashMap的key获取值 */ public List<String> hmget(String key, String hashMapKey) { ShardedJedis jedis = shardedJedisPool.getResource(); List<String> r = jedis.hmget(key, hashMapKey); shardedJedisPool.returnResource(jedis); return r; } // ------------------------------List------------------------------ /** * 根据key设置List */ public void lpush(String key, List<String> list) { ShardedJedis jedis = shardedJedisPool.getResource(); for (String listVal : list) { jedis.lpush(key, listVal); } shardedJedisPool.returnResource(jedis); } /** * 根据key获取list中的值【起始值~终止值】 end:-1表示取得所有 */ public List<String> lrange(String key, long start, long end) { ShardedJedis jedis = shardedJedisPool.getResource(); List<String> r = jedis.lrange(key, start, end); shardedJedisPool.returnResource(jedis); return r; } // // 添加数据 // jedis.lpush("lists", "vector"); // jedis.lpush("lists", "ArrayList"); // jedis.lpush("lists", "LinkedList"); // // 数组长度 // System.out.println(jedis.llen("lists")); // // 排序 // System.out.println(jedis.sort("lists")); // // 字串 // System.out.println(jedis.lrange("lists", 0, 3)); // // 修改列表中单个值 // jedis.lset("lists", 0, "hello list!"); // // 获取列表指定下标的值 // System.out.println(jedis.lindex("lists", 1)); // // 删除列表指定下标的值 // System.out.println(jedis.lrem("lists", 1, "vector")); // // 删除区间以外的数据 // System.out.println(jedis.ltrim("lists", 0, 1)); // // 列表出栈 // System.out.println(jedis.lpop("lists")); // // 整个列表值 // System.out.println(jedis.lrange("lists", 0, -1)); // ------------------------------Object------------------------------ /** * 设置对象 */ public void setObject(String key, Serializable object) { ShardedJedis jedis = shardedJedisPool.getResource(); jedis.set(key.getBytes(), JedisSerializeUtil.serialize(object)); shardedJedisPool.returnResource(jedis); } /** * 获取对象 */ public Object getObject(String key) { ShardedJedis jedis = shardedJedisPool.getResource(); return JedisSerializeUtil.unserialize(jedis.get(key.getBytes())); } }
(3)Jedis Util
package com.crm.redis.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * 序列化就是将一个对象转换为二进制的数据流。 * 这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口。 * 在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。 * * 反序列化:将二进制数据流转换成相应的对象。 * 如果想要完成对象的序列化,则还要依靠ObjectOutputStream和ObjectInputStream,前者属于序列化操作,而后者属于反序列化操作。 * */ public class JedisSerializeUtil { private static Log log = LogFactory.getLog(JedisSerializeUtil.class); /** * 序列化 * * @param object * @return */ public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { log.error("Jedis执行序列化异常:"+e.getMessage()); } return null; } /** * 反序列化 * * @param bytes * @return */ public static Object unserialize(byte[] bytes) { ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { log.error("Jedis执行反序列化异常:"+e.getMessage()); } return null; } }
(4)测试代码
package com.crm.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.crm.model.operator.BOCrmOperator; import com.crm.redis.RedisDao; public class TestRedis { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-redis.xml"); RedisDao RedisDao = (RedisDao) ac.getBean("RedisDao"); //--------------------String-------------------- RedisDao.setString("hello", "world"); System.out.println(RedisDao.getString("hello")); RedisDao.valueAppend("hello", "-----append"); System.out.println(RedisDao.getString("hello")); RedisDao.valueAppend("NOT_EXIST", "NOT_EXIST_VALUE"); System.out.println(RedisDao.getString("NOT_EXIST")); //--------------------Map-------------------- Map h = new HashMap(); h.put("name", "zhuyinbai"); h.put("age", "28"); RedisDao.hmset("user", h); System.out.println(RedisDao.hkeys("user")); System.out.println(RedisDao.hvals("user")); System.out.println(RedisDao.hmget("user","name")); System.out.println(RedisDao.hmget("user","age")); //--------------------List-------------------- List _list = new ArrayList(); _list.add("A1"); _list.add("A2"); _list.add("A3"); RedisDao.lpush("list", _list); System.out.println(RedisDao.lrange("list", 0, -1)); //--------------------Object-------------------- BOCrmOperator _o = new BOCrmOperator(); _o.setId(1l); _o.setCode("code"); _o.setName("name"); RedisDao.setObject("o:1", _o); System.out.println(((BOCrmOperator)RedisDao.getObject("o:1")).toString()); } }
相关推荐
在本教程“Redis+Jedis+案例实战”中,你将深入学习如何利用Redis和Jedis进行实际项目开发。以下是一些关键知识点的概述: 1. Redis基础知识: - 数据类型:Redis支持五种基本数据类型,包括字符串(String)、...
提供的压缩包文件包含了Redis实战的PDF文档,这将有助于你深入理解Redis的原理和实践,同时提供了哨兵机制的实现指南,帮助你部署和管理高可用的Redis集群。配套的JedisJAR包则可以直接用于你的Java项目,快速集成...
Redis是一款高性能的键值对数据库,常用于缓存、消息队列、计数器等多种场景。...提供的“redis辅助资料”可能包括了Redis的使用教程、Jedis的API文档、实战案例等内容,对于提升Redis和Jedis的使用技巧非常有帮助。
本篇将深入探讨Redis实战及其与Java的集成应用。 首先,让我们来看看“Redis实战pdf”。这份文档可能是对Redis实际应用的详细指南,涵盖了Redis的基本概念、数据结构、命令用法,以及如何在实际项目中部署和优化...
本书“Redis实战”是针对这一技术的深入学习资料,配合Java源代码,可以帮助开发者更好地理解和应用Redis。 Redis的核心特性包括: 1. **数据类型**:Redis支持多种数据结构,如字符串(String)、哈希(Hash)、列表...
本篇内容主要讲解的是分布式锁的实现原理和实战经验,使用 Redis 作为分布式锁的存储介质,通过 jedis 客户端来操作 Redis,以解决分布式系统中的锁问题。 知识点一:分布式锁的定义和原理 分布式锁是指在分布式...
在这个"使用Java实现Redis实战中的代码-JedisDemo.zip"中,我们很可能会找到一个基于Jedis的简单示例项目,帮助开发者了解如何在实际项目中集成和使用Redis。 首先,我们需要了解Jedis的基本用法。安装Jedis通常...
### Java与Redis实战 #### 第4章:Java与Redis集成 - **4.1 使用Jedis连接Redis** - **介绍**:Jedis 是一个 Java 客户端,用于与 Redis 交互。它提供了丰富的 API 来执行各种 Redis 命令。 - **示例代码**: ``...
Java开发之Redis实战案例 Redis实战案例 如果有Python基础,也可以参考《Redis使用手册》。 案例使用的Redis版本是本地windows 5.0版本,需要设置auth。 public static Jedis getJedis() { Jedis jedis = new ...
本实战教程将带你深入理解如何在SSM项目中集成Redis,以便快速进行高效开发。 首先,我们来看Spring框架如何与Redis进行集成。Spring提供了一个名为`spring-redis`的模块,它包含了对Redis的支持。你需要在项目的`...
8. **Jedis库的使用**:作为Java连接Redis的常用库,Jedis的API使用、连接池配置、异常处理等内容也是开发者关注的重点。 9. **实战项目**:书中很可能会通过实际案例,如电商、社交网络等,展示如何将Redis应用到...
对于Java开发者,可以学习如何在Java项目中集成Redis,使用Jedis或Lettuce等客户端库进行交互,实现高效的缓存策略和数据交换。 总结,Redis实战不仅涵盖了基本的数据类型和操作,还涉及高级特性如发布订阅、事务、...
Java-web旅游项目实战案例(四个)IDEA项目源码; 4 技术选型 4.1 Web层 a) Servlet:前端控制器 b) html:视图 c) Filter:过滤器 d) BeanUtils:数据封装 e) Jackson:json序列化工具 4.2 Service层 f) Javamail:...
### Redis 学习与实战应用 #### 一、Redis 概述 Redis 是一款非常流行的非关系型(NoSQL)数据库。它不仅提供了快速的数据访问速度,还支持数据的持久化,使其成为许多应用场景下的首选。 ##### 1.1 NoSQL 数据库...
系统采用SpringSecurity 6、JWT、SpringMail、MySQL、Jedis、Druid、Fastjson等技术栈,构建了一个功能完善、性能稳定的单体架构志愿者管理平台。旨在帮助开发者快速掌握SpringBoot框架,并提供一个完整的后端项目...
在这个实战教程中,我们将深入探讨如何在实际应用中操作Redis客户端。"redisDemo.zip"包含了一个名为"redisDemo-master"的项目,这很可能是用来演示Redis客户端使用的代码仓库。 一、Redis基础知识 1. Redis的数据...
Jedis jedis = new Jedis("localhost"); jedis.set("key", "value"); String value = jedis.get("key"); ``` 2. **哈希(Hash)**:用于存储键值对集合,常用于表示对象。例如,存储用户信息: ```java jedis....
Redis从入门到高可用 分布式实战教程,共140多节课程、 掌握redis主从、哨兵、集群 ,参数调优 目录: 9-9 原生安装-1.准备节点.mp4 9-8 原生安装.mp4 9-7 基本架构.mp4 9-6 虚拟槽哈希分布.mp4 9-5 一致性...
此外,书中还深入讨论了Redis在缓存、消息队列、计数器、限流、排行榜等常见应用场景下的最佳实践,以及如何与其他技术如Spring、Jedis、 lettuce等进行集成。通过实例分析,读者可以更好地掌握Redis在实际项目中的...
结合提供的"redis实战源码",你可以深入研究实际项目中如何集成和使用Redis与Java进行交互,了解在不同场景下如何优化性能和代码结构。通过学习这些源码,你可以更好地理解Redis在Java应用程序中的工作原理,提升你...