Redis自学笔记:3.4入门-列表类型
3.4列表类型
3.4.1介绍
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者
获得列表的某一片段.
优点:内部使用的是双向链表,所以向列表两端添加元素的时间复杂度为O(1),获取
越接近两端的元素速度越快.
- 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别
指向直接后继和直接前驱 - 时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法
乃至程序的效率。O(1)为常数阶.
缺点:通过索引访问元素比较慢
所以列表适合的应用于:
1. 社交网站的新鲜事
2. 记录日志
- 和散列类型键相同,最多能容纳232-1个元素
3.4.2命令
- 向列表两端增加元素
lpush key value [value...]
向列表左边增加元素
rpush key value [value...]
向列表右边增加元素 - 从列表两端弹出元素
lpop key
将列表左边的元素从列表中移除,并返回移除的元素值
rpop key
将列表左边的元素从列表中移除,并返回移除的元素值 - 获取列表中的元素个数
llen key
- 当键不存在时会返回0
- 获取列表片段
lrange key start stop
- redis获取列表片段方法:
- 所以从0开始,也支持负索引,表示从右边开始计算序数
- start的索引位置比stop的索引位置靠后,返回空列表
- 如果stop大于实际索引范围,则会返回到列表最右边的元素
- 片段包含stop元素(该处和python不同)
- redis获取列表片段方法:
- 删除列表中指定的值
lrem key count value
删除列表中前count个值为value的元素,返回值是实际删除的元素个数.- count>0,lrem命令从左边开始删除
count<0,lrem命令从右边开始删除
count=0,lrem删除所有值为value的元素
- count>0,lrem命令从左边开始删除
127.0.0.1:6379> lpush num 0 1 2 3
4
127.0.0.1:6379> rpush num -4 -5 -6
7
127.0.0.1:6379> lpop num
3
127.0.0.1:6379> rpop num
-6
127.0.0.1:6379> llen num
5
127.0.0.1:6379> lrange num 0 -1
2
1
0
-4
-5
127.0.0.1:6379> lpush num -4 2 0
8
127.0.0.1:6379> lrange num 0 -1
0
2
-4
2
1
0
-4
-5
127.0.0.1:6379> lrem num 1 2
1
127.0.0.1:6379> lrem num -1 5
0
127.0.0.1:6379> lrem num 0 -4
2
127.0.0.1:6379> lrange num 0 -1
0
2
1
0
-5
3.4.3实践
- 存储文章ID列表
我们使用列表型键posts:list记录文章ID列表.当发布新文章使用lpush命令
把新文章的ID加入到这个列表中,删除文章时也要把列表中文章ID删除
有了文章ID,可以使用lrange实现文章的分页,伪代码:$postsPerPage = 10
$start = ($currentPage-1) * $postsPerPage
$end = $currentPage * $postsPerPage -1
$postsID = lrange posts:list,$start,$end
# 获得了此页需要显示的文章ID,我们通过循环的方式读取文章
for each $id in $postsID:
$post = hgetall post:$id
print 文章标题: $post.title
该方法缺陷:
1. 文章的发布时间不易修改
2. 当文章数量较多时访问中间的页面性能较差 - 存储评论列表
使用列表型键post:文章ID:comments来存储某个文章的所有评论,伪代码:# 将评论序列化字符串
$serializedComment = serialize($author,$email,$time,$content)
lpush post:42:comments,$serializedComment
3.4.4命令拾遗
- 获得/设置指定索引的元素值
lindex key index
lset key index value
127.0.0.1:6379> rpush 诗人 李白 杜甫 白居易
3
127.0.0.1:6379> lindex 诗人 2
白居易
127.0.0.1:6379> lset 诗人 2 王维
OK
127.0.0.1:6379> lrange 诗人 0 -1
李白
杜甫
王维
- 只保留列表指定片段
ltrim key start end
127.0.0.1:6379> ltrim 诗人 0 1
OK
127.0.0.1:6379> lrange 诗人 0 -1
李白
杜甫
- 可应用于日志,只保留最近100条
- 向列表中插入元素
linsert key befor pivot value
向pivot前追加元素,返回值为列表长度
linsert key after pivot value
向pivot后追加元素,返回值为列表长度127.0.0.1:6379> linsert 诗人 before 李白 曹操
3
127.0.0.1:6379> linsert 诗人 after 杜甫 杜牧
4
127.0.0.1:6379> lrange 诗人 0 -1
曹操
李白
杜甫
杜牧
- 将元素从一个表转到另一个表
rpoplpush source destination
- 先执行rpop再执行lpush
Redis自学笔记:3.4入门-列表类型的更多相关文章
- Redis自学笔记:3.5入门-集合类型
3.5集合类型 3.5.1介绍 在集合中的每个元素都是不同的,且没有顺序 表3-4集合类型和列表类型的对比 - 集合类型 列表类型 存储内容 至多232-1个字符串 至多232-1个字符串 有序性 否 ...
- Redis自学笔记:3.2入门-字符串类型
3.2字符串类型 实际上redis不只是数据库,更多的公司和团队将redis用作缓存和 队列系统 3.2.1介绍 字符串类型是redis最基本的数据类型,它能存储任何形式的字符串, 包括二进制数据.你 ...
- Redis自学笔记:3.6入门-有序集合类型
3.6有序集合类型 3.6.1介绍 在集合类型基础上,为集合中每个元素都关联了一个分数,故可以获得 分数最高(最低)的前N个元素,可以获得指定范围内的元素等 有序集合中每个元素不同,但它们的分数却可以 ...
- Redis自学笔记:3.3入门-散列类型
3.3散列类型 3.3.1介绍 散列类型不能嵌套其他数据类型,一个散列类型可以包含至多232-1个字段 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的数据, 而字段值则存储属性值 ...
- Redis自学笔记:3.1入门-热身
第3章:入门 3.1热身 获取符合规则的键名列表:keys 匹配key 表3-1 glob风格通配符规则 符号 含义 ? 匹配一个字符 * 匹配任意个(包括0个)字符 [ ] 匹配括号间的任一字符,可 ...
- JavaScript高级程序设计之自学笔记(一)————Array类型
以下为自学笔记. 一.Array类型 创建数组的基本方式有两种: 1.1第一种是使用Array构造函数(可省略new操作符). 1.2第二种是使用数组字面量表示法. 二.数组的访问 2.1访问方法 在 ...
- jQuery:自学笔记(1)——基础入门
jQuery:自学笔记(1)——基础入门 认识JQuery 1.jQuery概述 jQuery是一个快速.小巧 .功能丰富的JavaScript函数库.它可以实现“写的少,做的多”的目标. jQuer ...
- Redis自学笔记:1.简介
博主教材:李子骅.人民邮电出版社.<redis入门指南> 博主操作系统系统:虚拟机Ubuntu16.04 博主redis版本:3.0.6 第1章:简介 redis是一个开源的.高性能的.基 ...
- Redis自学笔记:4.4进阶-消息通知
4.4消息通知 4.4.1任务队列 传递任务的队列.与任务队列进行交互的实体有两类,一类是生产者,一类是消费者. 生产者将需要处理的任务放入任务队列中,二消费者不断从任务队列中读入任务 信息并执行. ...
随机推荐
- 【python】查找函数定义
help(函数名) 举例:想知道gevnet.Timeout这个函数是怎么用的.help(gevent.Timeout). 之前不知道这样查,每次遇到新函数想知道有哪些参数我都要到网上疯狂查阅文档.现 ...
- mysql中有多种存储引擎,每种引擎都有自己的特色
mysql中有多种存储引擎,每种引擎都有自己的特色. 用途: MyISAM:快读, Memory:内存数据, InnoDB:完整的事务支持 锁: MyISAM:全表锁定, Memory:全表锁定, I ...
- element-ui中用el-dialog+el-table+el-pagination实现文件默认选中且在分页的条件下有记忆功能
需求: 点击按钮,出现列表弹框,选择需要的选项确认后显示选中的选项.每次点击按钮,列表中默认显示之前选中的文件. el-table-column,设type属性为selection,实现表格中多行选择 ...
- 广工赛-hdu6469-树链压缩/二分
比较复杂的一题.. 不管是二分答案还是直接做,都需要压缩树链 /* 给定n种怪物,每个怪物有属性a[i] 打死第i种怪物后,第i只怪物会分裂成a[i]个第i-1种怪 如果打死的是第1种,那么获得经验a ...
- jmeter IP欺骗功能
使用过loadrunner的同学,应该都了解有个IP欺骗功能,jmeter遇到类似需求怎样实现呢? 环境:windows7,jdk1.8,jmeter3.1 使用IP欺骗功能前提是本地有多个可用IP, ...
- 论文阅读笔记二十三:Learning to Segment Instances in Videos with Spatial Propagation Network(CVPR2017)
论文源址:https://arxiv.org/abs/1709.04609 摘要 该文提出了基于深度学习的实例分割框架,主要分为三步,(1)训练一个基于ResNet-101的通用模型,用于分割图像中的 ...
- 常见的爬虫分析库(3)-Python正则表达式与re模块
在线正则表达式测试 http://tool.oschina.net/regex/ 常见匹配模式 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\ ...
- python文件操作r+,w+,a+,rb+,
w:以写方式打开, a:以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+:以读写模式打开 w+:以读写模式打开 (参见 w ) a+:以读写模式打开 (参见 a ) rb:以二进制读模式 ...
- 手机网页制作教程META标签你知道多少?【转+加】
一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...
- Android常用框架和控件使用
Router框架 https://github.com/iqiyi/Andromeda/blob/master/CHINESE_README.md https://github.com/alibaba ...