`
toknowme
  • 浏览: 139932 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Jedis实战02

 
阅读更多

(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+案例实战(高清视频教程).rar

    在本教程“Redis+Jedis+案例实战”中,你将深入学习如何利用Redis和Jedis进行实际项目开发。以下是一些关键知识点的概述: 1. Redis基础知识: - 数据类型:Redis支持五种基本数据类型,包括字符串(String)、...

    Redis实战PDF价值50元,如何实现哨兵的主从,以及jedisJAR包

    提供的压缩包文件包含了Redis实战的PDF文档,这将有助于你深入理解Redis的原理和实践,同时提供了哨兵机制的实现指南,帮助你部署和管理高可用的Redis集群。配套的JedisJAR包则可以直接用于你的Java项目,快速集成...

    redis辅助文档 + jedis

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列、计数器等多种场景。...提供的“redis辅助资料”可能包括了Redis的使用教程、Jedis的API文档、实战案例等内容,对于提升Redis和Jedis的使用技巧非常有帮助。

    redis实战的pdf及java源代码

    本篇将深入探讨Redis实战及其与Java的集成应用。 首先,让我们来看看“Redis实战pdf”。这份文档可能是对Redis实际应用的详细指南,涵盖了Redis的基本概念、数据结构、命令用法,以及如何在实际项目中部署和优化...

    redis实战pdf书和java版源代码

    本书“Redis实战”是针对这一技术的深入学习资料,配合Java源代码,可以帮助开发者更好地理解和应用Redis。 Redis的核心特性包括: 1. **数据类型**:Redis支持多种数据结构,如字符串(String)、哈希(Hash)、列表...

    分布式多场景实战经验.docx

    本篇内容主要讲解的是分布式锁的实现原理和实战经验,使用 Redis 作为分布式锁的存储介质,通过 jedis 客户端来操作 Redis,以解决分布式系统中的锁问题。 知识点一:分布式锁的定义和原理 分布式锁是指在分布式...

    使用Java实现Redis实战中的代码-JedisDemo.zip

    在这个"使用Java实现Redis实战中的代码-JedisDemo.zip"中,我们很可能会找到一个基于Jedis的简单示例项目,帮助开发者了解如何在实际项目中集成和使用Redis。 首先,我们需要了解Jedis的基本用法。安装Jedis通常...

    Javs实战之Redis入门精华讲解

    ### Java与Redis实战 #### 第4章:Java与Redis集成 - **4.1 使用Jedis连接Redis** - **介绍**:Jedis 是一个 Java 客户端,用于与 Redis 交互。它提供了丰富的 API 来执行各种 Redis 命令。 - **示例代码**: ``...

    Java开发之Redis实战案例.rar

    Java开发之Redis实战案例 Redis实战案例 如果有Python基础,也可以参考《Redis使用手册》。 案例使用的Redis版本是本地windows 5.0版本,需要设置auth。 public static Jedis getJedis() { Jedis jedis = new ...

    SSM REDIS集成实战

    本实战教程将带你深入理解如何在SSM项目中集成Redis,以便快速进行高效开发。 首先,我们来看Spring框架如何与Redis进行集成。Spring提供了一个名为`spring-redis`的模块,它包含了对Redis的支持。你需要在项目的`...

    Redis实战 高清扫描 62M pdf java 经典书籍

    8. **Jedis库的使用**:作为Java连接Redis的常用库,Jedis的API使用、连接池配置、异常处理等内容也是开发者关注的重点。 9. **实战项目**:书中很可能会通过实际案例,如电商、社交网络等,展示如何将Redis应用到...

    Redis实战.pdf+Redis源码

    对于Java开发者,可以学习如何在Java项目中集成Redis,使用Jedis或Lettuce等客户端库进行交互,实现高效的缓存策略和数据交换。 总结,Redis实战不仅涵盖了基本的数据类型和操作,还涉及高级特性如发布订阅、事务、...

    Java-web旅游项目实战案例(四个)IDEA项目源码

    Java-web旅游项目实战案例(四个)IDEA项目源码; 4 技术选型 4.1 Web层 a) Servlet:前端控制器 b) html:视图 c) Filter:过滤器 d) BeanUtils:数据封装 e) Jackson:json序列化工具 4.2 Service层 f) Javamail:...

    Redis学习-实战.docx

    ### Redis 学习与实战应用 #### 一、Redis 概述 Redis 是一款非常流行的非关系型(NoSQL)数据库。它不仅提供了快速的数据访问速度,还支持数据的持久化,使其成为许多应用场景下的首选。 ##### 1.1 NoSQL 数据库...

    基于SpringBoot3.2.0的志愿者管理系统全栈实战设计源码

    系统采用SpringSecurity 6、JWT、SpringMail、MySQL、Jedis、Druid、Fastjson等技术栈,构建了一个功能完善、性能稳定的单体架构志愿者管理平台。旨在帮助开发者快速掌握SpringBoot框架,并提供一个完整的后端项目...

    redis客户端操作实战-redisDemo.zip

    在这个实战教程中,我们将深入探讨如何在实际应用中操作Redis客户端。"redisDemo.zip"包含了一个名为"redisDemo-master"的项目,这很可能是用来演示Redis客户端使用的代码仓库。 一、Redis基础知识 1. Redis的数据...

    redis in action java代码

    Jedis jedis = new Jedis("localhost"); jedis.set("key", "value"); String value = jedis.get("key"); ``` 2. **哈希(Hash)**:用于存储键值对集合,常用于表示对象。例如,存储用户信息: ```java jedis....

    2019年 Redis从入门到高可用 分布式实战教程

    Redis从入门到高可用 分布式实战教程,共140多节课程、 掌握redis主从、哨兵、集群 ,参数调优 目录: 9-9 原生安装-1.准备节点.mp4 9-8 原生安装.mp4 9-7 基本架构.mp4 9-6 虚拟槽哈希分布.mp4 9-5 一致性...

    redis实战 黄健宏 完整得

    此外,书中还深入讨论了Redis在缓存、消息队列、计数器、限流、排行榜等常见应用场景下的最佳实践,以及如何与其他技术如Spring、Jedis、 lettuce等进行集成。通过实例分析,读者可以更好地掌握Redis在实际项目中的...

    redis_java

    结合提供的"redis实战源码",你可以深入研究实际项目中如何集成和使用Redis与Java进行交互,了解在不同场景下如何优化性能和代码结构。通过学习这些源码,你可以更好地理解Redis在Java应用程序中的工作原理,提升你...

Global site tag (gtag.js) - Google Analytics