[redis数据结构]之 list类型

redis中的list集合数据类型,是一种双向链表的结构,list存在的元素是任意的string类型。那么redis是如何管理和操作list集合数据的呢,下文将阐述redis list集合的基本语法使用:

1、添加/创建一个list对象

# 分为栈式和队列两种添加
语法1:lpush [list集合] [元素] # 栈式添加元素,将list集合看成是一个栈类型,先进后出;
范例:lpush list1 hello
      lpush list1 world
阐述:遍历集合结果为:world, hello;也就是先进后出

语法2:rpush [list集合] [元素] # 队列式添加元素,先进先出
范例:rpush list2 hello
      rpush list2 world
阐述:遍历集合结果为:hello, world,先进先出,保持插入的顺序

2、遍历list集合元素

# 遍历都是从头部到尾部的过程
语法:lrange [集合] [开始索引] [结束索引]
范例:lrange list1 0 -1 # 结果为world,hello 
      lrange list2 0 -1 # 结果为hello, world
阐述:索引位置是从0开始,-1表示最后一个元素索引

3、获取某个索引的集合元素

语法:lindex [list集合] [索引]
范例:lindex list3 0 # 如果不存在,返回nil,否则返回该索引位置的元素

4、修改某个索引位置的集合元素

# 修改指定索引位置的元素
语法:lset [list集合] [索引] [新元素]
范例:lset list1 0 Hello 
      lrange list1 0 -1 # 之前0的位置是world,现在变成Hello

5、获取list集合的大小

语法:llen [list集合]
范例:llen list1 # 返回集合大小,2

6、插入某个元素

#插入元素不是通过索引来完成的,而是通过指定某个元素值的前,后插入
语法:linsert [list集合] [before | after] [元素] [待插入的元素]
# 假设list4={‘hello‘,‘world‘,‘hello‘}
范例:linsert list4 before hello wang1 
      linsert list4 after hello wang2
阐述:list4集合中有两个hello元素,每次仅仅匹配一个,从list开头匹配。在执行before时,得到结果为{‘wang1‘,‘hello‘,‘world‘,‘hello‘};执行after时,{‘wang1‘,‘hello‘,‘wang2‘,‘world‘,‘hello‘}.

7、获取某个区间的元素列表

# 截取结合指定索引区间的元素,区间外的元素删除
语法:ltrim [list集合] [开始索引] [结束索引]
范例:ltrim list4 0 1 
阐述:返回截取后的集合元素大小,遍历结果为{‘wang1‘,‘hello‘}

8、辅助方法

语法:rpoplpush [list集合1] [list集合2]
范例:rpoplpush list1 list2
阐述:从尾部删除list1中的一个元素,将其栈式插入到list2中,并返回list1删除的元素。相当于执行rpop list1,lpush list2

9、整体结构分析

由于list结构是双向链表结构,那么充头部插入或者从尾部差多都是OK的,lpush头部插入、lpop头部删除、rpush尾部插入、rpop尾部删除、lrange都是头部到尾部的遍历方式。

结构图如下:

时间: 2024-10-06 01:18:49

[redis数据结构]之 list类型的相关文章

[redis数据结构]之 hash类型

在讲解语法知识之前,教你如何掌握各种hash的基本潜规则,在不同的语言中,有点称之为hash.有的是map,但不管这么样,hash你可以看作是key-value一组的集合.我先将java中map的概念擅自的加入到redis的hash中,让我们更加容易的理解hash的潜规则: 一.hash潜规则 1.映射模型 值集合映射,键集合映射,Entry集合映射(key-value,有得称之为item(python)). 2.一般的方法列表 添加.删除.更新.判断键是否存在.对应映射模型的key集合.val

[redis数据结构] 之 string类型

本文介绍redis的string类型的命令使用方式,string类型是二进制安全的,可以存放任何数据类型,图片.对象等等都是可以的.下面将罗列与string类型相关的语法操作: 1.如何添加一个string 命令:set 添加一个string对象 语法:set [key] [value] 范例:set name wangzp  阐述:添加了一个名为name的string对象,值为'wangzp':如果之前已经存在name对象,那么将覆盖原来的对象. 2.如何获取一个string 命令:get 获

分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sorted Set. Redis数据类型内存结构分析 Redis内部使用一个redisObject对象来表示所有的key和value.redisObject主要的信息包括数据类型(type).编码方式(encoding).数据指针(ptr).虚拟内存(vm)等.type代表一个value对象具体是何种数

Redis 数据结构使用场景

Redis 数据结构使用场景 redis共有5种数据结构,每种的使用场景都是什么? 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String——字符串 Hash——字典 List——列表 Set——集合 Sorted Set——有序集合 下面我们就来简单说明一下它们各自

Redis数据结构详解之List(二)

序言 思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用redis实现一个消息队列. 为啦让本篇更有魅力,我再介绍下redis中list的基本属性,以及为什么使用redis中list列表类型,为什么使用消息队列,为什么不用rabbitmq而使用redis实现消息队列?呢,到这里为止,如果你是大咖,大牛,大神,大爷!不要听我吹牛逼啦,Close Page and

Redis学习笔记---字符串类型

补充 上篇笔记博客中有些有些关键点未提到,现在这里补充下 redis help 命令 help命令应该是我们使用任何一款软件产品经常用到的命令,有时候通过help命令能够更快的获取相关帮助,而不仅仅通过百度.同样,在Redis中的help命名写的就非常简洁易懂,虽然是只有英文版的帮助信息,但是只要有一定应用基础的人都可以看懂,如: 127.0.0.1:6379> help redis-cli 3.0.2 Type: "help @<group>" to get a l

REdis数据结构服务器

Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章: 1.Redis简介  Redis是一个key-value存储系统.和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表).sets(集合)和zsets(有序集合)几种数据类型.这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的. 2.Redis的

Redis数据结构之robj

本文及后续文章,Redis版本均是v3.2.8 我们知道一个database内的这个映射关系是用一个dict来维护的.dict的key固定用一种数据结构来表达,这这数据结构就是动态字符串sds.而value则比较复杂,为了在同一个dict内能够存储不同类型的value,这就需要一个通用的数据结构.针对不同的使用场景,这个通用的数据结构可以使用不同的数据结构实现,这样可以优化在不同场景下的效率.这个通用的数据结构就是robj(redisObject),也是本文主要探讨的redis中的对象是怎么实现

Redis数据结构之intset

本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST, OBJ_SET,OBJ_ZSET,OBJ_HASH.集合对象set有着广泛的实际业务应用场景,它包含的元素无序并且不能重复及集合间的交.并.差等基础的操作.本篇就来说说Redis暴露给我们使用的set集合对象的底层实现-intset. 其实,可以理解为有序整型集合 intset是一个由整数组成的有序集合,