Redis基本操作-list
Redis的5种数据结构:string、list、hash、set和zset;
Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型的数据结构的差异就在于 value 的结构不一样。

1、基本操作
- 列表的存储结构使用的是链表,不是数组;
- 使用的是双向链表;
- 随机定位性能较弱,首尾删除性能较优;
- 链表元素的位置使用自然数(0,1,2......n-1)表示,也可以使用负数,-1表示【倒数第一个】,-n表示【第一个元素】;
2、队列、堆栈
列表常用来作为异步队列使用
通过使用rpush、rpop、lpush、lpop四条指令,在链表的表头和表尾追加或移除元素,可以将链表作为队列或堆栈使用;
# 右进左出队列
localhost:0>rpush muscleape go
"1"
localhost:0>rpush muscleape java python
"3"
localhost:0>lpop muscleape
"go"
localhost:0>lpop muscleape
"java"
localhost:0>lpop muscleape
"python"
# 左进右出队列
localhost:0>lpush muscleape go java python
"3"
localhost:0>rpop muscleape
"go"
localhost:0>rpop muscleape
"java"
localhost:0>rpop muscleape
"python"
获取长度
localhost:0>rpush muscleape go java python
"3"
localhost:0>llen muscleape
"3"
读取
lindex 读取指定位置元素;
lrange 获取链表子元素列表;
localhost:0>rpush muscleape go java python
"3"
localhost:0>lindex muscleape 1
"java"
localhost:0>lrange muscleape 0 1
1) "go"
2) "java"
localhost:0>lrange muscleape 0 -1
1) "go"
2) "java"
3) "python"
修改元素
lset 在指定位置修改元素
localhost:0>rpush muscleape go java python
"3"
localhost:0>lset muscleape 1 PHP
"OK"
localhost:0>lrange muscleape 0 -1
1) "go"
2) "PHP"
3) "python"
插入元素
linsert 指定元素,在前或后插入元素
localhost:0>linsert muscleape before PHP Java
"4"
localhost:0>lrange muscleape 0 -1
1) "go"
2) "Java"
3) "PHP"
4) "python"
删除元素(指定删除元素的个数及元素的值-可能会有多个值)
lrem 键 数量 值
localhost:0>lrange muscleape 0 -1
1) "go"
2) "Java"
3) "PHP"
4) "python"
5) "java"
6) "java"
7) "C"
8) "C++"
9) "java"
10) "C#"
11) "java"
12) "java"
13) "java"
localhost:0>lrem muscleape 3 java
"3"
localhost:0>lrange muscleape 0 -1
1) "go"
2) "Java"
3) "PHP"
4) "python"
5) "C"
6) "C++"
7) "C#"
8) "java"
9) "java"
10) "java"
定长列表(范围之外的所有元素都将被移除)
ltrim 键 开始位置 结束位置【结束位置<开始位置===>等价于删除指令】
localhost:0>lrange muscleape 0 -1
1) "go"
2) "Java"
3) "PHP"
4) "python"
5) "C"
6) "C++"
7) "C#"
8) "java"
9) "java"
10) "java"
localhost:0>ltrim muscleape 0 6
"OK"
localhost:0>lrange muscleape 0 -1
1) "go"
2) "Java"
3) "PHP"
4) "python"
5) "C"
6) "C++"
7) "C#"
3、快速列表

1、Redis底层存储的不是一个简单的LinkedList,而是一种快速链表结构;
2、在列表元素较少时,使用一块连续的内存存储,ziplist(压缩列表);
3、数据较多时,改成quicklist,为普通链表需要附加指针空间太大,比较浪费空间;
4、链表和ziplist组合(做个ziplist使用双向指针串起来使用);
Redis基本操作-list的更多相关文章
- 三、Redis基本操作——List
小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...
- 二、Redis基本操作——String(实战篇)
小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...
- 一、Redis基本操作——String(原理篇)
小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...
- Redis基本操作-20150608
Redis基本操作-20150608 [http://my.oschina.net/u/241255/blog/206991] Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存 ...
- 【原】Redis基本操作
Redis基本操作 遍历操作 Pub-Sub server Lua脚本 Redis中的这些操作都是不分大小写的. 除了针对于具体类型的具体操作.还有一些其他操作. 遍历操作 SCAN cursor [ ...
- Redis基本操作——List
Redis基本操作——List(原理篇) 学习过数据结构的同学,一定对链表(Linked List)十分的熟悉.相信我们自己也曾经使用过这种数据结构. 链表分为很多种:单向链表,双向链表,循环链表,块 ...
- Redis基本操作-string
Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...
- jedis使用线程池封装redis基本操作
redisclient jedis 经常使用的 操作 key value hash list set zset 的基本操作 package cn.zto.util; import java.util. ...
- Redis 基本操作(一)
redis和普通的Key-Value结构不同,Redis的Key支持灵活的数据结构,除了strings,还有hashes.lists. sets 和sorted sets等结构.正是这些灵活的数据结构 ...
随机推荐
- tomcat源码阅读之Server和Service接口解析
tomcat中的服务器组件接口是Server接口,服务接口是Service,Server接口表示Catalina的整个servlet引擎,囊括了所有的组件,提供了一种优雅的方式来启动/关闭Catali ...
- vs2013下OpenGL环境的配置
1.下载glut库:https://files.cnblogs.com/files/laoxia/glutdlls37beta.zip 2.解压后,将glut.lib和glut32.lib两个文件拷贝 ...
- Oracle 补丁体系 及 opatch 工具 介绍
一. CPU(Critical Patch Update) 一个CPU内包含了对多个安全漏洞的修复,并且也包括相应必需的非安全漏洞的补丁.CPU是累积型的,只要安装最新发布的CPU即可,其中包括之前发 ...
- vue-cli 知识点
vue init webpack [project_name] 构建的项目,新增功能需要做的工作: table th:first-of-type { width: 100px; } table th: ...
- FineUI Grid中WindowField根据列数据决定是否Enalble
前台页面Grid控件中设置OnPreRowDataBound属性,windowFile控件设置ID protected void Grid1_PreRowDataBound(object sender ...
- 【Reporting Services 报表开发】— 如何根据明细的行数实现分页(比如每隔5行分页)
一.新建报表:对于初学者可以参考我前面的文章[Reporting Services 报表开发]— 总结 如图1: 图 1 二.选择 new_name文本框—>添加组—>选择行组中的父组.具 ...
- 【python】python性能分析--待完善
http://www.oschina.net/translate/python-performance-analysis http://blog.csdn.net/gzlaiyonghao/artic ...
- 【appium】根据UIAutomator定位元素
text属性的方法 driver.find_element_by_android_uiautomator('new UiSelector().text("Custom View") ...
- 关于buffer,cache,wb,wt,clean,inv,flush,以及其他
1. 有时候需要区分buffer和cache:buffer解决CPU写的问题,比如将多次写操作buffer起来一次性更新:cache解决CPU读的问题,将数据cache起来在下次读的时候快速取用. 2 ...
- app定位器带xpath的 uiautomatorviewer
参考文档:http://blog.csdn.net/kaka1121/article/details/53301517 在写脚本的过程中,总是遇到标签没有ID或者name等类似的唯一识别属性,为了能识 ...