oyhk 学习笔记
最近算是对redis研究了一下,为什么会用到redis,由于公司这次要做一个队列的缓存系统,基于这个项目要求,我选择了redis
这次具体对redis list的数据结构进行了简单的操作...
这次依然使用spring data redis去操作redis..个人喜欢啊,我真心喜欢spring,我选择用它...
至于一些简单的操作,我上次写了一篇文章:spring 结合 Redis 例子,简单入门例子,至于怎么安装redis这些,大家自己去查查怎么安装吧.安装方法也非常简单官网上也有..现在对于想研究redis更深入的朋友们,我推荐大家看这本书http://www.redisbook.com/en/latest/..我自己认为真的非常不错...
这次的代码是基于原来的基础上,去完善
下面是对于RedisService的简单测试用例
package com.xiangrikui.iaskservice.controller;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xiangrikui.iaskservice.common.redis.RedisService;
/**
* 简单的测试用例
*
* @author oyhk
*
*/
public class TestRedis {
ApplicationContext app = new ClassPathXmlApplicationContext(new String[] { "classpath:spring-redis.xml" });
// 这里已经配置好,属于一个redis的服务接口
RedisService redisService = (RedisService) app.getBean("redisService");
/**
* 往list1中添加三条记录
*/
@Test
public void lpush() {
long result = redisService.lpush("list1", new String[] { "list1.1", "list1.2", "list1.3" });
System.out.println(result);
// 这里是junit的断言,简单的测试用例,如果不抛出异常,证明添加数据到列表成功
}
/**
* 查看从0开始到10的位置的数据
*/
@Test
public void lrange() {
Listresults = redisService.lrange("list2", 0, 10);
System.out.println(results);
Assert.assertNotNull(results);
}
/**
* 从左边的开始元素出队列
*/
@Test
public void lpop() {
String result = redisService.lpop("list1");
System.out.println(result);
Assert.assertNotNull(result);
}
/**
* 从右边的开始元素出队列
*/
@Test
public void rpop() {
String result = redisService.rpop("list1");
System.out.println(result);
Assert.assertNotNull(result);
}
/**
* 指定的列表中,指定的位置元素修改值
*/
@Test
public void lset() {
String result = redisService.lset("list1", 1, "list1.3");
System.out.println(result);
Assert.assertEquals("OK", result);
}
/**
* 删除指定列表中1个值为list1.3的元素
*/
@Test
public void lrem() {
long result = redisService.lrem("list1", 1, "list1.3");
System.out.println(result);
Assert.assertEquals(1L, result);
}
/**
* 从指定的列表右边出队,添加到目的列表中 -->>注意:这个方法必须源list有数据,那么目的list你可以随便起个名
*
*/
@Test
public void rpoppush() {
String result = redisService.rpoppush("list1", "list2");
System.out.println(result);
Assert.assertNotNull(result);
}
}
服务接口类RedisService
package com.xiangrikui.iaskservice.common.redis;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import redis.clients.jedis.Jedis;
/**
* 封装redis 缓存服务器服务接口
*
* @author hk
*
* 2012-12-16 上午3:09:18
*/
public class RedisService {
/**
* 从指定的列表右边出队,添加到目的列表中
*
* @param srckey
* 源列表
* @param dstkey
* 目的列表
* @return
*/
public String rpoppush(String srckey, String dstkey) {
return this.getJedis().rpoplpush(srckey, dstkey);
}
/**
* 获取指定列表的范围数据
*
* @param key
* 列表名
* @param start
* 开始位置
* @param end
* 结束位置
* @return
*/
public Listlrange(String key, int start, int end) {
return this.getJedis().lrange(key, start, end);
}
/**
* 从队列的左边取出一条数据
*
* @param key
* 列表名
* @return
*/
public String lpop(String key) {
return this.getJedis().lpop(key);
}
/**
* 从队列的右边取出一条数据
*
* @param key
* 列表名
* @return
*/
public String rpop(String key) {
return this.getJedis().rpop(key);
}
/**
* 把一个值添加到对应列表中
*
* @param key
* 列表名
* @param index
* 添加的位置
* @param value
* 数据
* @return
*/
public String lset(String key, long index, String value) {
return this.getJedis().lset(key, index, value);
}
/**
* 把所有数据添加到一个列表中
*
* @param key
* 列表名
* @param values
* 数据
* @return
*/
public long lpush(String key, String... values) {
return this.getJedis().lpush(key, values);
}
/**
* 把所有数据添加到一个列表中,并且设置列表的存活时间
*
* @param key
* 列表名
* @param values
* 数据
* @param liveTime
* 存活时间--单位(秒)
* @return
*/
public long lpush(String key, String[] values, int liveTime) {
long result = this.getJedis().lpush(key, values);
this.getJedis().expire(key, liveTime);
return result;
}
/**
* 删除列表中对应值的元素
*
* @param key
* 列表名
* @param count
* 删除多少个相同的元素
* @param value
* 数据
* @return
*/
public long lrem(String key, long count, String value) {
return this.getJedis().lrem(key, count, value);
}
/**
* 返回指定列表范围内的元素
*
* @param key
* 列表名
* @param start
* 开始位置
* @param end
* 结束位置
* @return
*/
public List lrange(String key, long start, long end) {
return this.getJedis().lrange(key, start, end);
}
/**
* 通过key删除(字节)
*
* @param key
*/
public void del(byte[] key) {
this.getJedis().del(key);
}
/**
* 通过key删除
*
* @param key
*/
public void del(String key) {
this.getJedis().del(key);
}
/**
* 添加key value 并且设置存活时间(byte)
*
* @param key
* @param value
* @param liveTime
* 单位(秒)
*/
public void set(byte[] key, byte[] value, int liveTime) {
this.set(key, value);
this.getJedis().expire(key, liveTime);
}
/**
* 添加key value 并且设置存活时间
*
* @param key
* @param value
* @param liveTime
* 单位(秒)
*/
public void set(String key, String value, int liveTime) {
this.set(key, value);
this.getJedis().expire(key, liveTime);
}
/**
* 添加key value
*
* @param key
* @param value
*/
public void set(String key, String value) {
this.getJedis().set(key, value);
}
/**
* 添加key value (字节)(序列化)
*
* @param key
* @param value
*/
public void set(byte[] key, byte[] value) {
this.getJedis().set(key, value);
}
/**
* 获取redis value (String)
*
* @param key
* @return
*/
public String get(String key) {
String value = this.getJedis().get(key);
return value;
}
/**
* 获取redis value (byte [] )(反序列化)
*
* @param key
* @return
*/
public byte[] get(byte[] key) {
return this.getJedis().get(key);
}
/**
* 通过正则匹配keys
*
* @param pattern
* @return
*/
public Setkeys(String pattern) {
return this.getJedis().keys(pattern);
}
/**
* 检查key是否已经存在
*
* @param key
* @return 存在返回true
*/
public boolean exists(String key) {
return this.getJedis().exists(key);
}
/**
* 清空redis 所有数据
*
* @return
*/
public String flushDB() {
return this.getJedis().flushDB();
}
/**
* 查看redis里有多少数据
*/
public long dbSize() {
return this.getJedis().dbSize();
}
/**
* 检查是否连接成功
*
* @return
*/
public String ping() {
return this.getJedis().ping();
}
/**
* 通过多个key一次返回多个值
*
* @param keys
*/
public Listmget(String... keys) {
return this.getJedis().mget(keys);
}
/**
* 一次添加多个key value到redis中
*
* @param keysvalues
*/
public void mset(String... keysvalues) {
this.getJedis().mset(keysvalues);
}
/**
* 获取一个jedis 客户端
*
* @return
*/
private Jedis getJedis() {
if (jedis == null) {
return jedisConnectionFactory.getShardInfo().createResource();
}
return jedis;
}
private RedisService() {
}
// 操作redis客户端
private static Jedis jedis;
@Autowired
private JedisConnectionFactory jedisConnectionFactory;
}
把这个类复盖上篇文章的类,就可以直接使用...
大家多多交流
本文章来自:http://blog.mkfree.com/posts/5147c478975a24f6a830e53d
http://blog.mkfree.com/posts/5147c478975a24f6a830e53d