`
381895649
  • 浏览: 230325 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring data redis 高级篇list的相关用法

 
阅读更多

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

6
3
分享到:
评论

相关推荐

    spring data redis api jar

    10. **Spring整合**:Spring Data Redis与Spring框架深度集成,支持Spring Boot自动配置,可以快速搭建Redis相关的应用。 使用Spring Data Redis API,开发者可以极大地简化Redis的编程模型,通过面向对象的方式...

    SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例.zip

    这个压缩包文件“SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例.zip”显然包含了关于如何利用Spring Data Redis进行Redis数据类型操作的示例代码。下面我们将深入探讨Spring Data Redis对Redis主要...

    SpringDataRedis.rar

    - RedisTemplate是SpringDataRedis的核心组件,它提供了一系列的方法来执行Redis命令。开发者可以直接使用它来执行自定义的Redis命令,比如设置和获取键值,执行事务,或者操作集合类型如Set、List、Hash和Sorted ...

    spring-data-redis

    Spring Data Redis能很好地与其他Spring框架集成,如Spring Cache可以利用Redis作为缓存后端,Spring Session可以使用Redis存储用户的会话信息,Spring Cloud Data Flow可以利用Redis作为任务调度的存储。...

    spring-data-redis实例

    本文将深入探讨Spring Data Redis的使用方法,并通过实例项目“hotel-redis-app”来具体展示其在实际开发中的应用。 一、Spring Data Redis简介 Spring Data Redis是Spring项目下的一个模块,它提供了一套完整的...

    spring data redis 封装使用

    Spring Data Redis是Spring Framework的一个模块,它提供了一个高级抽象层来简化与Redis数据库的交互,使得开发者可以更加方便地使用Redis的数据结构,如String、Hash、List、Set和Sorted Set。 首先,我们需要在...

    spring-data-redis-1.6.0.RELEASE.jar + jedis-2.7.2.jar

    Spring Data Redis则是Spring框架提供的一套用于操作Redis的高级抽象库,它使得与Redis的数据交互变得更加简单和直观。现在我们来深入探讨一下这三个组件以及它们之间的关系。 首先,Redis是一个开源的、基于键值对...

    pring-data-redisjar和源文件

    3. **配置**:在Spring Boot项目中,只需添加相关依赖并配置Redis服务器的连接信息,Spring Data Redis就能自动初始化。在application.properties或yaml文件中设置host、port、password等参数即可。 三、核心功能...

    spring集成redis单节点、集群、哨兵配置

    集成完成后,Spring Data Redis提供了一套完整的API,使得在代码中操作Redis变得简单,如`.opsForValue()`、`opsForHash()`等方法,方便进行键值操作。 在实际项目中,根据业务需求选择合适的Redis部署模式,并结合...

    spring-redis-maven整合带安装包

    Spring Redis 是一个集成Redis数据库与Spring框架的模块,它提供了对Redis数据存储的全面支持,使得在Java应用中使用Redis变得更加便捷。这个"Maven整合工程"意味着该项目使用Maven作为构建工具,通过管理依赖关系来...

    spring 集成redis

    在IT行业中,Spring框架是Java应用开发的基石,它提供...同时,Spring Data Redis提供的高级功能,如事务支持、Key的过期策略、lua脚本执行等,都使得开发更加便捷。在实际项目中,可以根据需求进一步定制和优化配置。

    spring_redis maven实例

    1. **Spring Data Redis**: Spring Data Redis是Spring框架的一个模块,它为Redis提供了高级抽象和便捷的访问方式。通过使用Spring Data Redis,开发者可以轻松地操作Redis的数据结构,如字符串、哈希、列表、集合和...

    Spring boot redis demo.rar

    接下来,你可以创建一个Service,使用Spring Data Redis提供的`ReactiveRedisTemplate`或`RedisTemplate`进行数据操作。以下是一个简单的例子,展示了如何存取字符串类型的键值对: ```java @Service public class ...

    spring整合redis小demo

    首先,我们需要在项目中引入Spring对Redis支持的相关依赖。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-redis ``` 接...

    品优购_day08_网站前台SpringDataRedis_V1.31

    - 本章的目标之一是使用SpringDataRedis来操作不同数据类型的缓存,包括字符串、Set、List和Hash。 - Redis作为缓存系统,可以提高广告数据的读取速度,减少数据库的压力,尤其是在高并发场景下。 6. **系统架构*...

    Redis和Spring的整合包

    Spring Data Redis是Spring框架提供的一套与Redis集成的库,它简化了在Java应用中使用Redis的操作。这个"Redis+spring-data-redis jar包"整合包就是为了解决将Redis与Spring框架无缝结合的需求。 在Spring框架中...

    spring-data-redis支持批量操作

    2、使用方法如下: public List<V> pipelineGet(Set<K> keys){ return rt.opsForPipeline().get(keys); } public void pipelineSet(Map,V> valueMap){ redisTemplate.opsForPipeline().set(valueMap); } ...

    spring-data-redis-哈希操作.rar_redis-sprint

    在Spring Data Redis中,你可以使用`HashOperations`的`multiGet`方法来实现。例如,获取`Person`对象的`name`和`age`: ```java List<Object> values = hashOps.multiGet("person", Arrays.asList("name", "age")...

    详解Spring Data操作Redis数据库

    Spring Data Redis是Spring框架的一部分,专门用于简化与Redis数据库的交互。Redis是一个高效、高性能的键值存储系统,常被用作数据库、缓存和消息中间件。它支持丰富的数据结构,包括字符串、散列、列表、集合、...

    springboot整合Redis

    在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。 Spring Data Redis中提供了一个高度封装的类:**RedisTemplate**,针对 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口...

Global site tag (gtag.js) - Google Analytics