`
liuguofeng
  • 浏览: 449609 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

 
阅读更多

http://snowolf.iteye.com/blog/1666908

 

一开始以为Spring下操作哈希表,列表,真就是那么土。恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下。酷

  

相关链接:

征服 Redis

征服 Redis + Jedis

征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)

征服 Redis + Jedis + Spring (三)—— 列表操作

 

通过spring-data-redis完成LINDEX, LLEN, LPOP, LPUSH, LRANGE, LREM, LSET, LTRIM, RPOP, RPUSH命令。其实还有一些命令,当前版本不支持。皱眉不过,这些List的操作方法可以实现队列,堆栈的正常操作,足够用了。

为了简便操作,我使用了StringRedisTemplate。用字符串操作做展示。当然,你可以继续使用RedisTemplate。

闲言少叙,上代码,一目了然:

 

Java代码  收藏代码
  1. /** 
  2.  * Mar 5, 2013 
  3.  */  
  4. package org.zlex.redis.support;  
  5.   
  6. import java.util.List;  
  7.   
  8. import org.springframework.beans.factory.annotation.Autowired;  
  9. import org.springframework.data.redis.core.StringRedisTemplate;  
  10. import org.springframework.stereotype.Component;  
  11.   
  12. /** 
  13.  *  
  14.  * @author snowolf 
  15.  * @version 1.0 
  16.  * @since 1.0 
  17.  */  
  18. @Component("listOps")  
  19. public class ListOps {  
  20.   
  21.     @Autowired  
  22.     private StringRedisTemplate stringRedisTemplate;  
  23.   
  24.     /** 
  25.      * 压栈 
  26.      *  
  27.      * @param key 
  28.      * @param value 
  29.      * @return 
  30.      */  
  31.     public Long push(String key, String value) {  
  32.         return stringRedisTemplate.opsForList().leftPush(key, value);  
  33.     }  
  34.   
  35.     /** 
  36.      * 出栈 
  37.      *  
  38.      * @param key 
  39.      * @return 
  40.      */  
  41.     public String pop(String key) {  
  42.         return stringRedisTemplate.opsForList().leftPop(key);  
  43.     }  
  44.   
  45.     /** 
  46.      * 入队 
  47.      *  
  48.      * @param key 
  49.      * @param value 
  50.      * @return 
  51.      */  
  52.     public Long in(String key, String value) {  
  53.         return stringRedisTemplate.opsForList().rightPush(key, value);  
  54.     }  
  55.   
  56.     /** 
  57.      * 出队 
  58.      *  
  59.      * @param key 
  60.      * @return 
  61.      */  
  62.     public String out(String key) {  
  63.         return stringRedisTemplate.opsForList().leftPop(key);  
  64.     }  
  65.   
  66.     /** 
  67.      * 栈/队列长 
  68.      *  
  69.      * @param key 
  70.      * @return 
  71.      */  
  72.     public Long length(String key) {  
  73.         return stringRedisTemplate.opsForList().size(key);  
  74.     }  
  75.   
  76.     /** 
  77.      * 范围检索 
  78.      *  
  79.      * @param key 
  80.      * @param start 
  81.      * @param end 
  82.      * @return 
  83.      */  
  84.     public List<String> range(String key, int start, int end) {  
  85.         return stringRedisTemplate.opsForList().range(key, start, end);  
  86.     }  
  87.   
  88.     /** 
  89.      * 移除 
  90.      *  
  91.      * @param key 
  92.      * @param i 
  93.      * @param value 
  94.      */  
  95.     public void remove(String key, long i, String value) {  
  96.         stringRedisTemplate.opsForList().remove(key, i, value);  
  97.     }  
  98.   
  99.     /** 
  100.      * 检索 
  101.      *  
  102.      * @param key 
  103.      * @param index 
  104.      * @return 
  105.      */  
  106.     public String index(String key, long index) {  
  107.         return stringRedisTemplate.opsForList().index(key, index);  
  108.     }  
  109.   
  110.     /** 
  111.      * 置值 
  112.      *  
  113.      * @param key 
  114.      * @param index 
  115.      * @param value 
  116.      */  
  117.     public void set(String key, long index, String value) {  
  118.         stringRedisTemplate.opsForList().set(key, index, value);  
  119.     }  
  120.   
  121.     /** 
  122.      * 裁剪 
  123.      *  
  124.      * @param key 
  125.      * @param start 
  126.      * @param end 
  127.      */  
  128.     public void trim(String key, long start, int end) {  
  129.         stringRedisTemplate.opsForList().trim(key, start, end);  
  130.     }  
  131. }  

 

 

这里说明下,例如LPUSH,RPUSH,其实就是从左边压栈,还是从右边压栈的不同命令。可以把堆栈看作是一个从左至右的数组。如果左边压栈,右边出栈,那就是队列的入队/出队操作;如果左边压栈,左边出栈,那就是堆栈操作。

 

举个具体的例子:

队列操作:LPUSH入队,RPOP出队,同理,可把L|R替换。

堆栈操作:LPUSH压栈,LPOP出栈,同理,可把L|R替换。

 

下面进行测试用例,初始、结束时,分别做入队、出队操作,期间进行堆栈,队列操作。不用我细说了,看测试用例,很简单!

 

Java代码  收藏代码
  1. /** 
  2.  * Mar 5, 2013 
  3.  */  
  4. package org.zlex.redis;  
  5.   
  6. import static org.junit.Assert.*;  
  7.   
  8. import java.util.List;  
  9.   
  10. import org.junit.Before;  
  11. import org.junit.After;  
  12. import org.junit.Test;  
  13. import org.springframework.context.ApplicationContext;  
  14. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  15. import org.zlex.redis.support.ListOps;  
  16.   
  17. /** 
  18.  *  
  19.  * @author snowolf 
  20.  * @version 1.0 
  21.  * @since 1.0 
  22.  */  
  23. public class ListOpsTest {  
  24.     private ApplicationContext app;  
  25.     private ListOps listOps;  
  26.     private String key = "queue";  
  27.   
  28.     @Before  
  29.     public void before() throws Exception {  
  30.         app = new ClassPathXmlApplicationContext("applicationContext.xml");  
  31.         listOps = (ListOps) app.getBean("listOps");  
  32.   
  33.         System.out.println("------------IN---------------");  
  34.         for (int i = 0; i < 5; i++) {  
  35.             String uid = "u" + i;  
  36.             System.out.println(uid);  
  37.             listOps.in(key, uid);  
  38.         }  
  39.     }  
  40.   
  41.     @After  
  42.     public void after() {  
  43.         // ------------OUT---------------  
  44.         System.out.println("------------OUT---------------");  
  45.         long length = listOps.length(key);  
  46.         for (long i = 0; i < length; i++) {  
  47.             String uid = listOps.out(key);  
  48.             System.out.println(uid);  
  49.         }  
  50.     }  
  51.   
  52.     @Test  
  53.     public void stack() {  
  54.         // ------------PUSH---------------  
  55.         String key = "stack";  
  56.         int len = 5;  
  57.         System.out.println("------------PUSH---------------");  
  58.         for (int i = 0; i < len; i++) {  
  59.             String uid = "u" + System.currentTimeMillis();  
  60.             System.out.println(uid);  
  61.             listOps.push(key, uid);  
  62.         }  
  63.   
  64.         long length = listOps.length(key);  
  65.         assertEquals(len, length);  
  66.   
  67.         // ------------POP---------------  
  68.         System.out.println("------------POP---------------");  
  69.         for (long i = 0; i < length; i++) {  
  70.             String uid = listOps.pop(key);  
  71.             System.out.println(uid);  
  72.         }  
  73.     }  
  74.   
  75.     @Test  
  76.     public void index() {  
  77.   
  78.         // -------------INDEX-------------  
  79.         String value = listOps.index(key, 3);  
  80.         assertEquals("u3", value);  
  81.     }  
  82.   
  83.     @Test  
  84.     public void range() {  
  85.         // -------------RANGE-------------  
  86.         List<String> list = listOps.range(key, 35);  
  87.         boolean result1 = list.contains("u3");  
  88.         assertEquals(true, result1);  
  89.   
  90.         boolean result2 = list.contains("u1");  
  91.         assertEquals(false, result2);  
  92.     }  
  93.   
  94.     @Test  
  95.     public void trim() {  
  96.         // ------------TRIM---------------  
  97.         List<String> list = listOps.range(key, 35);  
  98.         listOps.trim(key, 35);  
  99.         boolean result3 = list.contains("u1");  
  100.         assertEquals(false, result3);  
  101.     }  
  102.   
  103.     @Test  
  104.     public void set() {  
  105.         // ------------SET-----------------  
  106.         List<String> list = listOps.range(key, 35);  
  107.         listOps.set(key, 4"ux4");  
  108.         boolean result4 = list.contains("u4");  
  109.         assertEquals(true, result4);  
  110.   
  111.     }  
  112.   
  113.     @Test  
  114.     public void remove() {  
  115.         // ------------REMOVE-----------------  
  116.         listOps.remove(key, 4"u4");  
  117.         String value = listOps.index(key, 4);  
  118.         assertEquals(null, value);  
  119.   
  120.     }  
  121. }  

 

回头继续整理,这个套路没错!酷

 

详见附件!

 

相关链接:

征服 Redis

征服 Redis + Jedis

征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)

征服 Redis + Jedis + Spring (三)—— 列表操作

分享到:
评论

相关推荐

    jedis操作redis工具类,使用该工具类无需配置spring

    1. **连接Redis**:`Jedis getJedis()` - 这个方法负责建立到Redis服务器的连接,可能包括设置连接池、配置连接参数等。 2. **关闭连接**:`void closeJedis(Jedis jedis)` - 在操作完成后,调用此方法关闭连接,...

    redis常用命令以及在java中的具体实现以及配置.docx

    在实际项目中,根据需求的不同,还可以选择使用 Jedis 或者 Spring Data Redis 来进行更加灵活的操作。同时,正确的配置也是保证应用正常运行的关键。希望本文能帮助开发者更好地理解和使用 Redis。

    redis utils 工具类

    RedisUtils工具类应包含一系列用于执行基本Redis操作的方法,如`set(String key, String value)`、`get(String key)`、`exists(String key)`、`del(String key)`等。这些方法封装了Jedis实例的操作,使得在业务代码...

    redis缓存实例

    // 其他如set、get、del等操作方法 } ``` - 使用`jedisUtils`工具类可以避免频繁创建和关闭Jedis对象,提高代码的可读性和效率。 3. **Redis可视化工具** - **Windows客户端**: Redis提供了一个名为`Redis ...

    redis-redis.zip

    - **基本操作**:如`jedis.set("key", "value")`设置键值,`jedis.get("key")`获取值,`jedis.del("key")`删除键。 - **事务操作**:`jedis.multi()`开始事务,`jedis.exec()`提交事务。 3. **Lettuce使用**: -...

    Redis安装部署与Java调用.zip

    Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。...在实际开发中,还可以结合Spring Data Redis等框架进一步简化操作。了解这些基本知识后,你可以根据业务需求进行更复杂的数据结构使用和性能优化。

    java与redis学习例子

    Redis支持多种命令,如`SET`、`GET`、`DEL`、`PUSH`、`POP`、`SORT`等,用于操作字符串、哈希、列表、集合和有序集合等数据结构。通过编写测试脚本,你可以熟悉这些命令的用法,并理解它们在实际应用中的作用。 3....

    redis jar包

    2. 数据操作:使用`set`方法存储键值对,`get`方法获取键对应的值,`del`方法删除键,`keys`方法查找所有键。 3. 高级操作:利用Jedis支持的哈希(`hset`、`hget`等)、列表(`lpush`、`rpop`等)、集合(`sadd`、`...

    Redis 缓存代码

    3. **基本操作**:Redis支持的操作包括SET(设置键值)、GET(获取键值)、DEL(删除键)、EXPIRE(设置过期时间)等。在Java代码中,你可以通过Jedis实例调用对应的方法实现这些操作。 4. **数据类型**:Redis支持...

    ssm框架整合redis实现缓存

    这里可以定义如`get`、`set`、`del`等基本操作,以及`expire`来设置过期时间等方法。 4. **整合Spring Cache**:如果使用Spring Cache,可以在配置中开启Redis作为缓存提供者,并指定注解如`@Cacheable`、`@...

    redis缓存技术入门

    Jedis是更常见的一种选择,它提供了丰富的API来操作Redis服务器。首先,你需要在项目中引入Jedis的依赖,然后配置Redis服务器的连接参数,如主机名、端口号、密码等。以下是一个简单的Jedis连接示例: ```java ...

    redis中demo文档

    - **配置文件**: 创建`applicationContext_jedis.xml`用于配置Redis连接信息。 - **业务逻辑修改**: - 修改`EmpBiz`类,集成Jedis客户端进行缓存操作。 - 更新`applicationContext_biz.xml`,注入Jedis实例到`...

    在java中操作redis博客源码

    - **基本操作**:例如设置键值`set(key, value)`,获取键值`get(key)`,删除键`del(key)`等。 - **数据类型操作**:Jedis支持对字符串、哈希、列表、集合、有序集合的操作,如`hset(hashKey, field, value)`(哈希...

    redis应用案例_缓存歌曲最新评论.zip

    例如,Jedis是官方推荐的Java客户端,提供了一系列API用于执行Redis命令。以下是一些基本操作示例: ```java Jedis jedis = new Jedis("localhost"); // 设置键值对 jedis.set("song:comments:last", "最新评论内容...

    Redis命令.docx

    Redis 的事务机制允许一系列的操作组合在一起作为一个单独的命令执行,从而提高数据处理的安全性。事务的基本步骤包括: 1. **MULTI**:标记一个事务块的开始。 2. **EXEC**:执行所有事务块内的命令。 3. **...

    SpringBoot整合Redis、mybatis实战,封装RedisUtils工具类.docx

    如上所述,引入`spring-boot-starter-data-redis`是为了实现SpringBoot与Redis的集成,这个依赖包含了连接Redis所需的组件,如`Lettuce`或`Jedis`客户端。同时,为了整合MyBatis,我们需要引入`mybatis-spring-boot-...

    java基于redis 全栈开发.rar

    在本项目"java基于redis 全栈开发"中,我们将探讨如何使用Java语言与Redis数据库进行集成,构建一个全栈应用程序。Redis是一个高性能的键值数据存储系统,常用于缓存、消息队列以及多种数据结构服务。Java作为广泛...

    SSM框架详解6

    以下是一个简单的示例代码,用于演示如何使用Jedis连接Redis并执行基本的CRUD操作: ```java import redis.clients.jedis.Jedis; public class RedisExample { public static void main(String[] args) { // ...

    Redis详细使用说明书

    客户端提供了各种命令,如set和get用于设置和获取键值对,sadd用于添加元素到集合中,hset用于设置哈希表中的字段,keys用于获取符合特定模式的所有键,del用于删除指定的键,exists用于检查键是否存在等。...

    javaredis源码-jredis-master:java实现redis

    jedis,spring-data-redis,spring-boot-starter-redis support redisDesktop management tool with v0.9+ 建筑学 RAM中仅使用键,该值是延迟加载 逐出政策 LRU algorithm 线性存储 1.based on jdk's MappedByteBuffer...

Global site tag (gtag.js) - Google Analytics