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的更多相关文章

  1. 三、Redis基本操作——List

    小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...

  2. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

  3. 一、Redis基本操作——String(原理篇)

    小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...

  4. Redis基本操作-20150608

    Redis基本操作-20150608 [http://my.oschina.net/u/241255/blog/206991]   Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存 ...

  5. 【原】Redis基本操作

    Redis基本操作 遍历操作 Pub-Sub server Lua脚本 Redis中的这些操作都是不分大小写的. 除了针对于具体类型的具体操作.还有一些其他操作. 遍历操作 SCAN cursor [ ...

  6. Redis基本操作——List

    Redis基本操作——List(原理篇) 学习过数据结构的同学,一定对链表(Linked List)十分的熟悉.相信我们自己也曾经使用过这种数据结构. 链表分为很多种:单向链表,双向链表,循环链表,块 ...

  7. Redis基本操作-string

    Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...

  8. jedis使用线程池封装redis基本操作

    redisclient jedis 经常使用的 操作 key value hash list set zset 的基本操作 package cn.zto.util; import java.util. ...

  9. Redis 基本操作(一)

    redis和普通的Key-Value结构不同,Redis的Key支持灵活的数据结构,除了strings,还有hashes.lists. sets 和sorted sets等结构.正是这些灵活的数据结构 ...

随机推荐

  1. 廖雪峰 ---- Python教程

    这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...

  2. RabbitMQ-官方指南-RabbitMQ配置

    原文:http://www.rabbitmq.com/configure.html RabbitMQ 提供了三种方式来定制服务器: 环境变量 定义端口,文件位置和名称(接受shell输入,或者在环境配 ...

  3. tyvj1391走廊泼水节

    题目:http://www.joyoi.cn/problem/tyvj-1391 考虑对于每一条边,新加的长度是(左边点数*右边点数-1)*(当前边权+1): 然后要kruskal的思想,把边从小到大 ...

  4. POJ1191棋盘分割

    题目:http://poj.org/problem?id=1191 1.分析式子!!! 发现xba是定值,σ的大小仅和∑ xi^2 有关.故dp条件是平方和最小. 2.分出一块就像割掉一条,只需枚举从 ...

  5. 添加mysamba

    一. 复制/home/tingpan/openwrt/barrier_breaker/feeds/luci/applications文件夹下的luci-samba文件,将文件中的内容samba改为my ...

  6. file_get_contents failed to open stream: HTTP request failed(一个字符决定成败)

    file_get_contents 开始成功了.后来不知怎么的就报错,调试半天没发现什么问题. 结果.里面多了一个"空格"就报错.去掉空格就好了,你们仔细找找吧.

  7. nginx和apache最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

    nginx和apache的一些优缺点比较,摘自网络,加自己的一些整理. nginx相对于apache的优点: 1.轻量级,同样是web 服务,比apache 占用更少的内存及资源 2.抗并发,ngin ...

  8. jQuery控制网页字体大小和肤色

    在一些网站上经常看到有控制网页肤色和字体大小的功能,接下来,我们将用两个例子来实现这两个功能. 网页字体大小 首先我们在网页中添加一些被控制大小的文字和字体控制的按钮. <!DOCTYPE> ...

  9. R语言学习——条件筛选

  10. 上Google Adsense个人的一点体验

    最近我想开通一个Google Adsense帐号,因为以前注册过一个Google帐号,所以我以为两个是可以共通的,因为很久没上Google帐号,我记不太清密码了,所以我先是登录了Google,登上去了 ...