您的位置:首页 > 数据库 > Redis

Spring-Data之StringRedisTemplate-boundListOps方法描述

2016-11-20 00:00 381 查看

上篇文章已经介绍过对 boundValueOps 方法的介绍,下面是链接地址:

https://my.oschina.net/u/2278977/blog/787112

上面有介绍需要的 jar包以及配置等

如果各位同学不想看测试代码,跟测试结果,可以直接通过导航,进入到方法描述中,找你需要的方法描述

下面直接上测试代码:

--------------------------------分割线-----------------------------------------

Left开头 方法的一些介绍,因为各方法条件不一,所以代码我就拆分成几段来展示了,一起展示会比较混乱,多处打印,会用 分割线来分割,表示不同方法的结果打印

测试代码:

//先获取 redis对value为list的操作对象
BoundListOperations<String, String> listRedisTemplate = redisTemplate.boundListOps("hexiaowu");

//获取key的名称
String key = listRedisTemplate.getKey();
System.out.println("key:"+key);

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

//左边出栈,PS:这不是查询,这是取出
String s = listRedisTemplate.leftPop();
System.out.println("list中,最左边的value为:"+s);


测试结果:

0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1
list中,最左边的value为:5


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//在list中第一个跟value一样的值的左边压栈,如果有则返回在栈中的index,如果没有这个value,则返回-1,不压栈进入
Long value = listRedisTemplate.leftPush("1", "a");
System.out.println("leftPush返回结果:"+value);
List<String> range1 = listRedisTemplate.range(0, -1);
for (int i = 0; i < range1.size(); i++) {
System.out.println(i+"位置的value是:"+range1.get(i));
}

System.out.println("---------------");

Long value1 = listRedisTemplate.leftPush("c", "C");
System.out.println("leftPush返回结果:"+ value1);
List<String> range2 = listRedisTemplate.range(0, -1);
for (int i = 0; i < range2.size(); i++) {
System.out.println(i+"位置的value是:"+range2.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1
leftPush返回结果:7
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:a
4位置的value是:1
5位置的value是:2
6位置的value是:1
leftPush返回结果:-1
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:a
4位置的value是:1
5位置的value是:2
6位置的value是:1


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//传入多个参数,从右到左,往list里面压栈,并且返回list长度
Long aLong = listRedisTemplate.leftPushAll("a","b","c");
System.out.println("leftPushAll返回值="+aLong);

List<String> range2 = listRedisTemplate.range(0, -1);
for (int i = 0; i < range2.size(); i++) {
System.out.println(i+"位置的value是:"+range2.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1
---------------
leftPushAll返回值=9
0位置的value是:c
1位置的value是:b
2位置的value是:a
3位置的value是:5
4位置的value是:4
5位置的value是:3
6位置的value是:1
7位置的value是:2
8位置的value是:1


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//判断list里面是否有数据,如果有,则左边压栈,如果没有,则不压栈,并且返回0
Long value = listRedisTemplate.leftPushIfPresent("a");
System.out.println("leftPushIfPresent返回结果="+value);

List<String> range3 = listRedisTemplate.range(0, -1);
for (int i = 0; i < range3.size(); i++) {
System.out.println(i+"位置的value是:"+range3.get(i));
}

//删除key,测试leftPushIfPresent方法
redisTemplate.delete(key);

//判断list里面是否有数据,如果有,则左边压栈,如果没有,则不压栈,并且返回0
Long value1 = listRedisTemplate.leftPushIfPresent("a");
System.out.println("---------------");
System.out.println("leftPushIfPresent返回结果="+value1);


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1
---------------
leftPushIfPresent返回结果=7
0位置的value是:a
1位置的value是:5
2位置的value是:4
3位置的value是:3
4位置的value是:1
5位置的value是:2
6位置的value是:1
---------------
leftPushIfPresent返回结果=0


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//list最左边数据,出栈,并且设定剩余value的缓存时间
String s = listRedisTemplate.leftPop(1, TimeUnit.DAYS);
System.out.println("leftPop返回结果="+s);

List<String> range1 = listRedisTemplate.range(0, -1);

for (int i = 0; i < range1.size(); i++) {
System.out.println(i+"位置的value是:"+range1.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1
---------------
leftPop返回结果=5
0位置的value是:4
1位置的value是:3
2位置的value是:1
3位置的value是:2
4位置的value是:1


Right开头 方法的介绍,因为 right方法跟left方法基本一致,就不上代码了,直接描述就好了

这就是 right开头的所有方法.



right方法,对比left不同的在于,rightPush方法,是从数组的右边进行压栈

rightPop方法,是从数组的右边进行出栈

以上,就是left跟right的不同,只是出入栈的顺序不同而已,我就不上测试代码了,有兴趣的同学,可以自己测试一下,看看是否是跟我描述的一致

----------------------------我是华丽的分割线-------------------------------------

接下来,就是其他方法的介绍了,毕竟不可能只有那么几个方法对吧!

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index5 = listRedisTemplate.leftPush("1");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//替换list中,在index下标位置的value
listRedisTemplate.set(1,"a");

List<String> range1 = listRedisTemplate.range(0, -1);

for (int i = 0; i < range1.size(); i++) {
System.out.println(i+"位置的value是:"+range1.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1
---------------
0位置的value是:5
1位置的value是:a
2位置的value是:3
3位置的value是:1
4位置的value是:2
5位置的value是:1


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("5");
Long index1 = listRedisTemplate.leftPush("2");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

// 移除list中 count个value为5的值,并且返回移除的数量,
// 如果count为0,或者大于list中为value为5数量的总和,那么移除所有value为5的值,并且返回移除数量
Long b = listRedisTemplate.remove(0, "5");
System.out.println("remove返回结果="+b);

List<String> range1 = listRedisTemplate.range(0, -1);

for (int i = 0; i < range1.size(); i++) {
System.out.println(i+"位置的value是:"+range1.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:2
4位置的value是:5
---------------
remove返回结果=2
0位置的value是:4
1位置的value是:3
2位置的value是:2


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//返回list中,下标为index的值,如果超过list长度,那么返回null
//如果传入的是负数,会转为绝对值,如果负数的绝对值超过list的长度,也返回null
String index5 = listRedisTemplate.index(1);
System.out.println("index返回结果="+index5);


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:2
4位置的value是:1
---------------
index返回结果=4


测试代码:

//左边压栈,并且返回在list中的下标
Long index = listRedisTemplate.leftPush("1");
Long index1 = listRedisTemplate.leftPush("2");
Long index2 = listRedisTemplate.leftPush("3");
Long index3 = listRedisTemplate.leftPush("4");
Long index4 = listRedisTemplate.leftPush("5");

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range = listRedisTemplate.range(0, -1);

for (int i = 0; i < range.size(); i++) {
System.out.println(i+"位置的value是:"+range.get(i));
}

System.out.println("---------------");

//只保留list从start开始,到end结束位置的value,其余位置的value全部移除
listRedisTemplate.trim(1, 4);

//查询list从0开始,到index位的值,如果是-1,则表示查询出来所有
List<String> range1 = listRedisTemplate.range(0, -1);

for (int i = 0; i < range1.size(); i++) {
System.out.println(i+"位置的value是:"+range1.get(i));
}


测试结果:

key:hexiaowu
0位置的value是:5
1位置的value是:4
2位置的value是:3
3位置的value是:2
4位置的value是:1
---------------
0位置的value是:4
1位置的value是:3
2位置的value是:2
3位置的value是:1


剩余一些其他方法,在上篇文章中已经介绍过,在这就不介绍了,如果有没看过上面文章的,这是跳转地址,可以去查看一下:https://my.oschina.net/u/2278977/blog/787112

----------------------------我是华丽的分割线-------------------------------------

→→→→→→boundListOps接口文档在这

方法名称方法描述
List<V> range(long start, long end)
从star位置开始获取list到end位置的值,并且返回
void trim(long start, long end)
保留从start到end截止位置的value,其余的,全部移除
Long size()
获取list的长度,并且返回长度
Long leftPush(V value)
左边压栈,并且返回在list中的index
Long leftPushAll(V... values)
多参数左边压栈,参数位置也是从左往右入栈,并且返回list的长度
Long leftPushIfPresent(V value)
检查list内是否有value,如果有,从左边压栈,并且返回list长度,如果list内没有元素,不入栈,并且返回0
Long leftPush(V pivot, V value)
在list中从左往右第一个跟pivot一样的值的左边压栈,并且返回list长度,如果没有这个pivot,则返回-1,不入栈
Long rightPush(V value)
从list右边入栈,并且返回入栈后的index
Long rightPushAll(V... values)
多参数右边入栈,参数位置也是从左往右入栈,并且返回list的长度
Long rightPushIfPresent(V value)
检查list内是否有value,如果有,从右边入栈,并且返回list长度,如果list内没有元素,不入栈,并且返回0
Long rightPush(V pivot, V value)
在list中从右往左第一个跟pivot一样的值的左边压栈,并且返回list长度,如果没有这个pivot,则返回-1,不入栈
V leftPop()
从list左边开始出栈一位
V leftPop(long timeout, TimeUnit unit)
从list左边出栈一位,并且设定剩下元素的缓存时间
V rightPop()
从右边出栈一位
V rightPop(long timeout, TimeUnit unit)
从右边出栈一位,并且设定剩下元素的缓存时间
Long remove(long i, Object value)
移除list中 count个value为5的值,并且返回移除的数量,
如果count为0,或者大于list中为value为5数量的总和,那么移除所有value为5的值,并且返回移除数量
V index(long index)
返回list中,下标为index的值,如果超过list长度,那么返回null
如果传入的是负数,会转为绝对值,如果负数的绝对值超过list的长度,也返回null
void set(long index, V value)
替换list中,在index下标中的元素
如果觉得好,请回复下,谢谢,

欢迎转载,请注明出处跟作者,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Spring Data