200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java中使用Jedis操作Redis实例

java中使用Jedis操作Redis实例

时间:2019-11-30 00:01:58

相关推荐

java中使用Jedis操作Redis实例

要想在Java中连接Redis,并进行操作,由两种方式,一种是spring data redis,它是由spring集成的,不支持集群,一种是官方推荐的jedis,支持集群,其他功能差不多一样,

这里我们介绍jedis操作实例,以下是使用Jedis的具体步骤:

1、如果是在Maven项目中,在pom.xml中增加如下语句,如果不是Maven项目下载包导入项目即可:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.6.2</version></dependency>

2、创建redis.properties配置文件,设置连接参数

# Redis settings redis.host=192.168.0.240redis.port=6379redis.pass=xxxxxxredis.timeout=10000redis.maxIdle=300redis.maxTotal=600# 毫秒redis.maxWaitMillis=1000redis.testOnBorrow=false

3、创建属性文件加载工具类,用于获取redis.properties文件

package com.rmd.cart.utils;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/*** 属性文件加载工具类* @author lc*/public class PropertyUtil {//加载property文件到io流里面public static Properties loadProperties(String propertyFile) {Properties properties = new Properties();try {InputStream is = PropertyUtil.class.getClassLoader().getResourceAsStream(propertyFile);if(is == null){is = PropertyUtil.class.getClassLoader().getResourceAsStream("properties/" + propertyFile);}properties.load(is);} catch (IOException e) {e.printStackTrace();}return properties;}/*** 根据key值取得对应的value值** @param key* @return*/public static String getValue(String propertyFile, String key) {Properties properties = loadProperties(propertyFile);return properties.getProperty(key);}}

4、创建连接redis工具类

package com.rmd.cart.utils;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;/*** redis工具类* @author lc*/public class JedisUtil {private static JedisPool jedisPool = null;private JedisUtil() {}//写成静态代码块形式,只加载一次,节省资源static {Properties properties = PropertyUtil.loadProperties("redis.properties");String host = properties.getProperty("redis.host");String port = properties.getProperty("redis.port");String pass = properties.getProperty("redis.pass");String timeout = properties.getProperty("redis.timeout");String maxIdle = properties.getProperty("redis.maxIdle");String maxTotal = properties.getProperty("redis.maxTotal");String maxWaitMillis = properties.getProperty("redis.maxWaitMillis");String testOnBorrow = properties.getProperty("redis.testOnBorrow");JedisPoolConfig config = new JedisPoolConfig();//控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;//如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。config.setMaxTotal(Integer.parseInt(maxTotal));//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。config.setMaxIdle(Integer.parseInt(maxIdle));//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;config.setMaxWaitMillis(Long.parseLong(maxWaitMillis));//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;config.setTestOnBorrow(Boolean.valueOf(testOnBorrow));jedisPool = new JedisPool(config, host, Integer.parseInt(port), Integer.parseInt(timeout), pass);}/*** 从jedis连接池中获取获取jedis对象** @return*/private Jedis getJedis() {return jedisPool.getResource();}private static final JedisUtil jedisUtil = new JedisUtil();/*** 获取JedisUtil实例** @return*/public static JedisUtil getInstance() {return jedisUtil;}/*** 回收jedis(放到finally中)** @param jedis*/private void returnJedis(Jedis jedis) {if (null != jedis && null != jedisPool) {jedisPool.returnResource(jedis);}}/*** 销毁连接(放到catch中)** @param jedis*/private static void returnBrokenResource(Jedis jedis) {if (null != jedis && null != jedisPool) {jedisPool.returnResource(jedis);}}/*** 添加sorted set** @param key* @param value* @param score*/public void zadd(String key, String value, double score) {Jedis jedis = getJedis();jedis.zadd(key, score, value);returnJedis(jedis);}/*** 返回指定位置的集合元素,0为第一个元素,-1为最后一个元素* @param key* @param start* @param end* @return*/public Set<String> zrange(String key, int start, int end) {Jedis jedis = getJedis();Set<String> set = jedis.zrange(key, start, end);returnJedis(jedis);return set;}/*** 获取给定区间的元素,原始按照权重由高到低排序* @param key* @param start* @param end* @return*/public Set<String> zrevrange(String key, int start, int end) {Jedis jedis = getJedis();Set<String> set = jedis.zrevrange(key, start, end);returnJedis(jedis);return set;}/*** 添加对应关系,如果对应关系已存在,则覆盖** @param key* @param map 对应关系* @return 状态,成功返回OK*/public String hmset(String key, Map<String, String> map) {Jedis jedis = getJedis();String s = jedis.hmset(key, map);returnJedis(jedis);return s;}/*** 向List头部追加记录** @param key* @param value* @return 记录总数*/public long rpush(String key, String value) {Jedis jedis = getJedis();long count = jedis.rpush(key, value);returnJedis(jedis);return count;}/*** 向List头部追加记录** @param key* @param value* @return 记录总数*/private long rpush(byte[] key, byte[] value) {Jedis jedis = getJedis();long count = jedis.rpush(key, value);returnJedis(jedis);return count;}/*** 删除** @param key* @return*/public long del(String key) {Jedis jedis = getJedis();long s = jedis.del(key);returnJedis(jedis);return s;}/*** 从集合中删除成员* @param key* @param value* @return 返回1成功* */public long zrem(String key, String... value) {Jedis jedis = getJedis();long s = jedis.zrem(key, value);returnJedis(jedis);return s;}public void saveValueByKey(int dbIndex, byte[] key, byte[] value, int expireTime)throws Exception {Jedis jedis = null;boolean isBroken = false;try {jedis = getJedis();jedis.select(dbIndex);jedis.set(key, value);if (expireTime > 0)jedis.expire(key, expireTime);} catch (Exception e) {isBroken = true;throw e;} finally {returnResource(jedis, isBroken);}}public byte[] getValueByKey(int dbIndex, byte[] key) throws Exception {Jedis jedis = null;byte[] result = null;boolean isBroken = false;try {jedis = getJedis();jedis.select(dbIndex);result = jedis.get(key);} catch (Exception e) {isBroken = true;throw e;} finally {returnResource(jedis, isBroken);}return result;}public void deleteByKey(int dbIndex, byte[] key) throws Exception {Jedis jedis = null;boolean isBroken = false;try {jedis = getJedis();jedis.select(dbIndex);jedis.del(key);} catch (Exception e) {isBroken = true;throw e;} finally {returnResource(jedis, isBroken);}}public void returnResource(Jedis jedis, boolean isBroken) {if (jedis == null)return;if (isBroken)jedisPool.returnBrokenResource(jedis);elsejedisPool.returnResource(jedis);}/*** 获取总数量* @param key* @return*/public long zcard(String key) {Jedis jedis = getJedis();long count = jedis.zcard(key);returnJedis(jedis);return count;}/*** 是否存在KEY* @param key* @return*/public boolean exists(String key) {Jedis jedis = getJedis();boolean exists = jedis.exists(key);returnJedis(jedis);return exists;}/*** 重命名KEY* @param oldKey* @param newKey* @return*/public String rename(String oldKey, String newKey) {Jedis jedis = getJedis();String result = jedis.rename(oldKey, newKey);returnJedis(jedis);return result;}/*** 设置失效时间* @param key* @param seconds*/public void expire(String key, int seconds) {Jedis jedis = getJedis();jedis.expire(key, seconds);returnJedis(jedis);}/*** 删除失效时间* @param key*/public void persist(String key) {Jedis jedis = getJedis();jedis.persist(key);returnJedis(jedis);}/*** 添加一个键值对,如果键存在不在添加,如果不存在,添加完成以后设置键的有效期* @param key* @param value* @param timeOut*/public void setnxWithTimeOut(String key,String value,int timeOut){Jedis jedis = getJedis();if(0!=jedis.setnx(key, value)){jedis.expire(key, timeOut);}returnJedis(jedis);}/*** 返回指定key序列值 * @param key* @return*/public long incr(String key){Jedis jedis = getJedis();long l = jedis.incr(key);returnJedis(jedis);return l;}/*** 获取当前时间 * @return 秒*/public long currentTimeSecond(){Long l = 0l;Jedis jedis = getJedis();Object obj = jedis.eval("return redis.call('TIME')",0);if(obj != null){List<String> list = (List)obj;l = Long.valueOf(list.get(0));}returnJedis(jedis);return l;}}

5、编写redis服务类

package com.rmd.cart.service.impl;import java.util.Date;import java.util.Set;import org.springframework.stereotype.Service;import com.rmd.cart.utils.JedisUtil;/*** redis服务* @author lc*/@Service("redisService")public class RedisService {/*** 添加SortSet型数据* @param key* @param value*/public void addSortSet(String key, String value) {double score = new Date().getTime();JedisUtil jedisUtil = JedisUtil.getInstance();jedisUtil.zadd(key, value, score);}/*** 获取倒序的SortSet型的数据* @param key* @return*/public Set<String> getDescSortSet(String key) {JedisUtil jedisUtil = JedisUtil.getInstance();return jedisUtil.zrevrange(key, 0, -1);}/*** 删除SortSet型数据* @param key* @param value*/public void deleteSortSet(String key, String value) {JedisUtil jedisUtil = JedisUtil.getInstance();jedisUtil.zrem(key, value);}/*** 批量删除SortSet型数据* @param key* @param value*/public void deleteSortSetBatch(String key, String[] value) {JedisUtil jedisUtil = JedisUtil.getInstance();jedisUtil.zrem(key, value);}/*** 范围获取倒序的SortSet型的数据* @param key* @return*/public Set<String> getDescSortSetPage(String key,int start, int end) {JedisUtil jedisUtil = JedisUtil.getInstance();return jedisUtil.zrevrange(key, start, end);}/*** 获取SortSet型的总数量* @param key* @return*/public long getSortSetAllCount(String key) {JedisUtil jedisUtil = JedisUtil.getInstance();return jedisUtil.zcard(key);}/*** 检查KEY是否存在* @param key* @return*/public boolean checkExistsKey(String key) {JedisUtil jedisUtil = JedisUtil.getInstance();return jedisUtil.exists(key);}/*** 重命名KEY* @param oldKey* @param newKey* @return*/public String renameKey(String oldKey, String newKey) {JedisUtil jedisUtil = JedisUtil.getInstance();return jedisUtil.rename(oldKey, newKey);}/*** 删除KEY* @param key*/public void deleteKey(String key) {JedisUtil jedisUtil = JedisUtil.getInstance();jedisUtil.del(key);}/*** 设置失效时间* @param key* @param seconds 失效时间,秒*/public void setExpireTime(String key, int seconds) {JedisUtil jedisUtil = JedisUtil.getInstance();jedisUtil.expire(key, seconds);}/*** 删除失效时间* @param key*/public void deleteExpireTime(String key) {JedisUtil jedisUtil = JedisUtil.getInstance();jedisUtil.persist(key);}}

注意:以上是公共基础,下面是我业务操作,怎样保存数据和获取数据

6、由于我想做购物车,创建购物车service接口,代码如下

package com.rmd.cart.service;import java.util.Set;/*** @Description: 购物车service* @author lc*/public interface CartService {/*** * @Description: 添加购物车* @author lc* @param customerId* void*/public void add(String customerId);/*** @Description: 获取购物车数据* @author lc* @param customerId* @return* Set<String>*/public Set<String> getCart(String customerId);}

7、创建impl类实现service接口,代码如下

package com.rmd.cart.service.impl;import java.util.Set;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.rmd.cart.service.CartService;@Service("cartService")public class CartServiceImpl implements CartService {@Autowiredprivate RedisService redisService;@Overridepublic void add(String customerId) {redisService.addSortSet("rmd_cart_test123", customerId);}@Overridepublic Set<String> getCart(String customerId) {return redisService.getDescSortSet("rmd_cart_test123");}}

8、创建一个对象类,用户数据测试

package com.rmd.cart.bean;import java.io.Serializable;import java.util.List;public class SpuInfo implements Serializable{private Integer spuid;//spuidprivate long createTime;//添加时间private List<SkuInfo> skuList;//sku信息集合public Integer getSpuid() {return spuid;}public void setSpuid(Integer spuid) {this.spuid = spuid;}public long getCreateTime() {return createTime;}public void setCreateTime(long createTime) {this.createTime = createTime;}public List<SkuInfo> getSkuList() {return skuList;}public void setSkuList(List<SkuInfo> skuList) {this.skuList = skuList;}}

9、创建测试类,使用junit4进行测试

添加数据

package rmd_cart_provider.service.test;import java.io.IOException;import java.io.StringWriter;import java.io.Writer;import javax.annotation.Resource;import org.codehaus.jackson.JsonGenerationException;import org.codehaus.jackson.map.JsonMappingException;import org.codehaus.jackson.map.ObjectMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.rmd.cart.bean.SpuInfo;import com.rmd.cart.service.CartService;@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试@ContextConfiguration({"/applicationContext.xml"}) //加载配置文件public class CartTest {@Resource private CartService cartService;@Test public void test() throws JsonGenerationException, JsonMappingException, IOException{SpuInfo spu = new SpuInfo();spu.setSpuid(123);spu.setCreateTime(105456464);//将对象转换成json字符串ObjectMapper om = new ObjectMapper();Writer wr = new StringWriter();om.writeValue(wr, spu);String str = wr.toString();//添加数据cartService.add(str);}}

获取数据

package rmd_cart_provider.service.test;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Set;import javax.annotation.Resource;import org.codehaus.jackson.JsonGenerationException;import org.codehaus.jackson.map.JsonMappingException;import org.codehaus.jackson.map.ObjectMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.rmd.cart.bean.SpuInfo;import com.rmd.cart.service.CartService;@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试@ContextConfiguration({"/applicationContext.xml"}) //加载配置文件public class CartTest {@Resource private CartService cartService;@Test public void test() throws JsonGenerationException, JsonMappingException, IOException{//获取数据List<SpuInfo> spuList = new ArrayList<>();ObjectMapper om = new ObjectMapper();//转回对象Set<String> set = cartService.getCart(null);Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String value = iterator.next();SpuInfo spuVo = om.readValue(value, SpuInfo.class);spuList.add(spuVo);}}}

上面添加和获取数据的时候用到了JUnit4和ObjectMapper

JUnit4单元测试,这个应该都知道,只要加入包就行

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency>

ObjectMapper这个是一个高效的对象和json之间转换的类,具体方法查文档,谁用都说好,推荐给大家

<dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.4</version></dependency>

以上是个人在学习和做项目中用到的东西,记录一下,如有更好的建议一起研究学习

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。