文档章节

redis操作数据-lists

wangma
 wangma
发布于 2014/11/03 21:50
字数 1235
阅读 36
收藏 0

1.关于list

        有意思的是 list 的 pop 操作还有阻塞版本的,当我们[lr]pop 一个 list 对象时,如果 list 是空,或者不存在,会立即返回 nil。但是阻塞版本的 b[lr]pop 可以则可以阻塞,当然可以加超时时间,超时后也会返回 nil。为什么要阻塞版本的 pop 呢,主要是为了避免轮询。举个简单的例子如果我们用 list 来实现一个工作队列。执行任务的 thread 可以调用阻塞版本的 pop 去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。

1.1  lpush在key对应list的头部添加字符串元素

127.0.0.1:6379> lpush mylist tonva
(integer) 1
127.0.0.1:6379> lpush mylist huage
(integer) 2
127.0.0.1:6379> lrange mylist -1 0
(empty list or set)
127.0.0.1:6379> lrange mylist 0 1
1) "huage"
2) "tonva"
127.0.0.1:6379> lrange mylist 0 -1
1) "huage"
2) "tonva"

在此处我们先插入了一个 tonva,然后在 tonva 的头部插入了一个 huage。其中 lrange 是用于取 mylist 的内容。

1.2 rpush在key对应list的尾部添加字符创元素

127.0.0.1:6379> rpush mylist2 name
(integer) 1
127.0.0.1:6379> rpush mylist2 password
(integer) 2
127.0.0.1:6379> rrange mylist2 0 -1
(error) ERR unknown command 'rrange'
127.0.0.1:6379> lrange mylist2 0 -1
1) "name"
2) "password"

在此处我们先插入了一个 name,然后在 name 的尾部插入了一个 password。

1.3 linsert在key对应list的指定位置之前或者之后添加字符串元素

127.0.0.1:6379> linsert mylist2 before name age
(integer) 3
127.0.0.1:6379> linsert mylist2 after password sex
(integer) 4
127.0.0.1:6379> lrange mylist2 0 -1
1) "age"
2) "name"
3) "password"
4) "sex"

可以发现我现在name之前插入一个age,在password之后插入一个sex

1.4 lset设置list中指定下标的元素值(下表从0开始)

127.0.0.1:6379> lrange mylist3 0 1
1) "test"
127.0.0.1:6379> lset mylist3 0 hello
OK
127.0.0.1:6379> lrange mylist3 0 1
1) "hello"

设置下表为0的值为hello,如果mylist3中不存在对应下表的值,当使用lset会报错

127.0.0.1:6379> lset mylist3 1 test
(error) ERR index out of range

1.5 lrem从可以对应的list中删掉count个和value相同的元素

count>0 时,按从头到尾的顺序删除,具体如下:

redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
redis 127.0.0

count<0 时,按从尾到头的顺序删除,具体如下:

redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist6 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist6 -2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379>

count=0 时,删除全部,具体如下:

redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist7 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist7 0 "hello"
(integer) 3
redis 127.0.0.1:6379> lrange mylist7 0 -1
1) "foo"
redis 127.0.0.1:6379>

1.6 ltrim保留指定key的值范围内的数据

redis 127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist8 "three"
(integer) 3
redis 127.0.0.1:6379> rpush mylist8 "four"
(integer) 4
redis 127.0.0.1:6379> ltrim mylist8 1 -1
OK
redis 127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
2) "three"
3) "four"
redis 127.0.0.1:6379>

1.7 lpop从 list 的头部删除元素,并返回删除元素

redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> lpop mylist
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "world"
redis 127.0.0.1:6379>

1.8 rpop从 list 的尾部删除元素,并返回删除元素

redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpop mylist2
"world"
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
redis 127.0.0.1:6379>

1.9 rpoplpush从第一个 list 的尾部移除元素并添加到第二个 list 的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个 list 是空或者不存在返回 nil

redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
3) "hello"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "hello"
3) "foo"
redis 127.0.0.1:6379>

2.0 lindex返回名称为 key 的 list 中 index 位置的元素

redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lindex mylist5 0
"three"
redis 127.0.0.1:6379> lindex mylist5 1
"foo"
redis 127.0.0.1:6379>

2.1 llen返回 key 对应 list 的长度

redis 127.0.0.1:6379> llen mylist5
(integer) 2
redis 127.0.0.1:6379>



© 著作权归作者所有

共有 人打赏支持
wangma
粉丝 8
博文 46
码字总数 29223
作品 0
深圳
后端工程师
私信 提问
Redis的七种特性及其适合的应用场景

Strings、Hashs、Lists、Sets、Sorted Sets、Pub/Sub、Transactions Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。使用Strings类型,你可以完全实现目 前 ...

夕阳红树林
2012/06/15
0
0
Redis 之七种武器

长生剑、孔雀翎、碧玉刀、多情环、离别钩、霸王枪、拳头是古龙笔下的七种武器,而本文打算将Redis的几种使用方式 Strings、Hashs、Lists、Sets、Sorted Sets、Pub/Sub、Transactions 也比作七...

红薯
2011/08/29
1K
1
(3)redis队列功能

Redis队列功能介绍 List 常用命令: Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用 Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用 Brpoplpush Lindex获...

Airship
2016/01/26
96
0
十五分钟介绍 Redis 数据结构

Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。它起步较晚,发展迅速,目前已被许多大型机构采用,比如Github,看看谁在用它...

鉴客
2011/10/08
2.9K
3
Redis 系列 - 1 【简要介绍】 - 它是什么?它用来做什么?它的优势与短板如何?

1.0 前提 阅读目的: 对什么是内存型数据库有概念性的认知。? 阅读需知:有关Redis系列的博文,大致有以下的5篇博文。本ID将陆续补充。 本ID Redis系列 1 . 0 :首先,这是您在Redis的官方网...

止静
2014/09/18
0
1

没有更多内容

加载失败,请刷新页面

加载更多

分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0
android自定义viewgroup画背景

设计部要求背景实现一个背景边框带圆弧的效果: 所以想着用自定义控件画一个背景。 为了方便,继承的是LinearLayout,在onMeasure中先获取控件宽高: @Overrideprotected void onMeasure(in...

醉雨
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部