通过spring-data-redis完成LINDEX, LLEN, LPOP, LPUSH, LRANGE, LREM, LSET, LTRIM, RPOP, RPUSH命令。其实还有一些命令,当前版本不支持。不过,这些List的操作方法可以实现队列,堆栈的正常操作,足够用了。
为了简便操作,我使用了StringRedisTemplate。用字符串操作做展示。当然,你可以继续使用RedisTemplate。
闲言少叙,上代码,一目了然:
-
-
-
-
packageorg.zlex.redis.support;
-
-
importjava.util.List;
-
-
importorg.springframework.beans.factory.annotation.Autowired;
-
importorg.springframework.data.redis.core.StringRedisTemplate;
-
importorg.springframework.stereotype.Component;
-
-
-
-
-
-
-
-
@Component("listOps")
-
publicclassListOps{
-
-
@Autowired
-
privateStringRedisTemplatestringRedisTemplate;
-
-
-
-
-
-
-
-
-
publicLongpush(Stringkey,Stringvalue){
-
returnstringRedisTemplate.opsForList().leftPush(key,value);
-
}
-
-
-
-
-
-
-
-
publicStringpop(Stringkey){
-
returnstringRedisTemplate.opsForList().leftPop(key);
-
}
-
-
-
-
-
-
-
-
-
publicLongin(Stringkey,Stringvalue){
-
returnstringRedisTemplate.opsForList().rightPush(key,value);
-
}
-
-
-
-
-
-
-
-
publicStringout(Stringkey){
-
returnstringRedisTemplate.opsForList().leftPop(key);
-
}
-
-
-
-
-
-
-
-
publicLonglength(Stringkey){
-
returnstringRedisTemplate.opsForList().size(key);
-
}
-
-
-
-
-
-
-
-
-
-
publicList<String>range(Stringkey,intstart,intend){
-
returnstringRedisTemplate.opsForList().range(key,start,end);
-
}
-
-
-
-
-
-
-
-
-
publicvoidremove(Stringkey,longi,Stringvalue){
-
stringRedisTemplate.opsForList().remove(key,i,value);
-
}
-
-
-
-
-
-
-
-
-
publicStringindex(Stringkey,longindex){
-
returnstringRedisTemplate.opsForList().index(key,index);
-
}
-
-
-
-
-
-
-
-
-
publicvoidset(Stringkey,longindex,Stringvalue){
-
stringRedisTemplate.opsForList().set(key,index,value);
-
}
-
-
-
-
-
-
-
-
-
publicvoidtrim(Stringkey,longstart,intend){
-
stringRedisTemplate.opsForList().trim(key,start,end);
-
}
-
}
这里说明下,例如LPUSH,RPUSH,其实就是从左边压栈,还是从右边压栈的不同命令。可以把堆栈看作是一个从左至右的数组。如果左边压栈,右边出栈,那就是队列的入队/出队操作;如果左边压栈,左边出栈,那就是堆栈操作。
举个具体的例子:
队列操作:LPUSH入队,RPOP出队,同理,可把L|R替换。
堆栈操作:LPUSH压栈,LPOP出栈,同理,可把L|R替换。
下面进行测试用例,初始、结束时,分别做入队、出队操作,期间进行堆栈,队列操作。不用我细说了,看测试用例,很简单!
-
-
-
-
packageorg.zlex.redis;
-
-
importstaticorg.junit.Assert.*;
-
-
importjava.util.List;
-
-
importorg.junit.Before;
-
importorg.junit.After;
-
importorg.junit.Test;
-
importorg.springframework.context.ApplicationContext;
-
importorg.springframework.context.support.ClassPathXmlApplicationContext;
-
importorg.zlex.redis.support.ListOps;
-
-
-
-
-
-
-
-
publicclassListOpsTest{
-
privateApplicationContextapp;
-
privateListOpslistOps;
-
privateStringkey="queue";
-
-
@Before
-
publicvoidbefore()throwsException{
-
app=newClassPathXmlApplicationContext("applicationContext.xml");
-
listOps=(ListOps)app.getBean("listOps");
-
-
System.out.println("------------IN---------------");
-
for(inti=0;i<5;i++){
-
Stringuid="u"+i;
-
System.out.println(uid);
-
listOps.in(key,uid);
-
}
-
}
-
-
@After
-
publicvoidafter(){
-
-
System.out.println("------------OUT---------------");
-
longlength=listOps.length(key);
-
for(longi=0;i<length;i++){
-
Stringuid=listOps.out(key);
-
System.out.println(uid);
-
}
-
}
-
-
@Test
-
publicvoidstack(){
-
-
Stringkey="stack";
-
intlen=5;
-
System.out.println("------------PUSH---------------");
-
for(inti=0;i<len;i++){
-
Stringuid="u"+System.currentTimeMillis();
-
System.out.println(uid);
-
listOps.push(key,uid);
-
}
-
-
longlength=listOps.length(key);
-
assertEquals(len,length);
-
-
-
System.out.println("------------POP---------------");
-
for(longi=0;i<length;i++){
-
Stringuid=listOps.pop(key);
-
System.out.println(uid);
-
}
-
}
-
-
@Test
-
publicvoidindex(){
-
-
-
Stringvalue=listOps.index(key,3);
-
assertEquals("u3",value);
-
}
-
-
@Test
-
publicvoidrange(){
-
-
List<String>list=listOps.range(key,3,5);
-
booleanresult1=list.contains("u3");
-
assertEquals(true,result1);
-
-
booleanresult2=list.contains("u1");
-
assertEquals(false,result2);
-
}
-
-
@Test
-
publicvoidtrim(){
-
-
List<String>list=listOps.range(key,3,5);
-
listOps.trim(key,3,5);
-
booleanresult3=list.contains("u1");
-
assertEquals(false,result3);
-
}
-
-
@Test
-
publicvoidset(){
-
-
List<String>list=listOps.range(key,3,5);
-
listOps.set(key,4,"ux4");
-
booleanresult4=list.contains("u4");
-
assertEquals(true,result4);
-
-
}
-
-
@Test
-
publicvoidremove(){
-
-
listOps.remove(key,4,"u4");
-
Stringvalue=listOps.index(key,4);
-
assertEquals(null,value);
-
-
}
-
}
回头继续整理,这个套路没错!
分享到:
相关推荐
NULL 博文链接:https://snowolf.iteye.com/blog/1667104
Redis Windows32位+64位安装包,Linux压缩包, Redis图形操作管理软件,Jedis
Redis+Jedis+案例实战(高清视频教程).rar
NULL 博文链接:https://snowolf.iteye.com/blog/1633196
redis3.2.1+jedis2.5+jedis.api一站下载
基于当前流行技术组合的前后端分离商城系统:SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含商城、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、优惠券...
里面包含了spring-data-redis-1.3.4.RELEASE.jar ,但是jedis可以不用,用spring-data-redis方式的同学可以使用
yshop基于当前流行技术组合的前后端分离商城系统: SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含分类、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、...
Springboot+SpringSecurity+SpringSession+Redis+Mybatis-Plus+Swwager
redis3.2.1+jedis2.8.0+jedis.api.rar一站下载
基于maven+springmvc+redis+mybatis整合案例框架,主要实现redis的读取案例
redis2.8windows64位版本+jedis2.5jar+jedis英文api
Redis+Jedis安装与使用(一)-附件资源
Springboot+Redis+Dubbo+Rocketmq Springboot+Redis+Dubbo+Rocketmq Springboot+Redis+Dubbo+Rocketmq
vue+springboot+redis+kaptcha实现登录页验证码
大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统,baidu链接,谢谢
SpringMVC+Redis+MyBatis项目,主要实现Redis注释缓存
Springboot+redis+mybatisplus
Spring boot+redis+rabbitMq实例整合的简单例子,可用来参考学习