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等结构.正是这些灵活的数据结构 ...
随机推荐
- 廖雪峰 ---- Python教程
这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...
- RabbitMQ-官方指南-RabbitMQ配置
原文:http://www.rabbitmq.com/configure.html RabbitMQ 提供了三种方式来定制服务器: 环境变量 定义端口,文件位置和名称(接受shell输入,或者在环境配 ...
- tyvj1391走廊泼水节
题目:http://www.joyoi.cn/problem/tyvj-1391 考虑对于每一条边,新加的长度是(左边点数*右边点数-1)*(当前边权+1): 然后要kruskal的思想,把边从小到大 ...
- POJ1191棋盘分割
题目:http://poj.org/problem?id=1191 1.分析式子!!! 发现xba是定值,σ的大小仅和∑ xi^2 有关.故dp条件是平方和最小. 2.分出一块就像割掉一条,只需枚举从 ...
- 添加mysamba
一. 复制/home/tingpan/openwrt/barrier_breaker/feeds/luci/applications文件夹下的luci-samba文件,将文件中的内容samba改为my ...
- file_get_contents failed to open stream: HTTP request failed(一个字符决定成败)
file_get_contents 开始成功了.后来不知怎么的就报错,调试半天没发现什么问题. 结果.里面多了一个"空格"就报错.去掉空格就好了,你们仔细找找吧.
- nginx和apache最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
nginx和apache的一些优缺点比较,摘自网络,加自己的一些整理. nginx相对于apache的优点: 1.轻量级,同样是web 服务,比apache 占用更少的内存及资源 2.抗并发,ngin ...
- jQuery控制网页字体大小和肤色
在一些网站上经常看到有控制网页肤色和字体大小的功能,接下来,我们将用两个例子来实现这两个功能. 网页字体大小 首先我们在网页中添加一些被控制大小的文字和字体控制的按钮. <!DOCTYPE> ...
- R语言学习——条件筛选
- 上Google Adsense个人的一点体验
最近我想开通一个Google Adsense帐号,因为以前注册过一个Google帐号,所以我以为两个是可以共通的,因为很久没上Google帐号,我记不太清密码了,所以我先是登录了Google,登上去了 ...