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;
}

 把这个类复盖上篇文章的类,就可以直接使用...