Redis五大数据类型使用——List

List(列表)

①lpush(左插入)、lrange(查询集合)、rpush(右插入)操作

127.0.0.1:6379> lpush list v1  #新增一个集合
(integer) 1
127.0.0.1:6379> lpush list v2
(integer) 2
127.0.0.1:6379> lpush list v3
(integer) 3
#lrange
127.0.0.1:6379> LRANGE list 0 -1  #查询list的所有元素值
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> lpush list1 v1 v2 v3 v4 v5  #批量添加集合元素
(integer) 5
127.0.0.1:6379> LRANGE list1 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
###这里大家有没有注意到,先进去的会到后面,也就是我们的lpush的意思是左插入,l--left
#rpush
127.0.0.1:6379> LRANGE list 0 1  #指定查询列表中的元素,从下标零开始,1结束,两个元素
1) "v3"
2) "v2"
127.0.0.1:6379> LRANGE list 0 0  #指定查询列表中的唯一元素
1) "v3"
127.0.0.1:6379> rpush list rv0  #右插入,跟lpush相反,这里添加进去元素是在尾部!
(integer) 4
127.0.0.1:6379> lrange list 0 -1  #查看集合所有元素
1) "v3"
2) "v2"
3) "v1"
4) "rv0"
##联想:这里我们是不是可以做一个,保存的记录值(如:账号密码的记录),
每次都使用lpush,老的数据永远在后面,我们每次获取 0 0 位置的元素,是不是相当于更新了
数据操作,但是数据记录还在?想要查询记录即可获取集合所有元素!

②lpop(左移除)、rpop(右移除)操作

127.0.0.1:6379> lrange list1 0 -1       
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
127.0.0.1:6379> lpop list1                # 从头部删除第一个元素
"v5"
127.0.0.1:6379> lrange list1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> rpop list1                # 删除最后一个元素
"v1"
127.0.0.1:6379> lrange list1 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379>

 ③lindex(查询指定下标元素)、llen(获取集合长度) 操作

127.0.0.1:6379> lrange list1 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> lindex list1 1    # 获取下标为1的数据,小标从0开始   
"v3"
127.0.0.1:6379> lindex list1 0
"v4"
127.0.0.1:6379> llen list1        # 获取类型为list的key的元素长度
(integer) 3
127.0.0.1:6379>

 ④lrem(根据value移除指定的值)

127.0.0.1:6379> lrange list1 0 -1 
 1) "v3"
 2) "v3"
 3) "v4"
 4) "v1"
 5) "v5"
 6) "v2"
 7) "v2"
 8) "v2"
 9) "v4"
10) "v3"
11) "v2"
127.0.0.1:6379> lrem list1 2 v3   # 移除list中v3元素,移除两个
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "v4"
2) "v1"
3) "v5"
4) "v2"
5) "v2"
6) "v2"
7) "v4"
8) "v3"
9) "v2"
127.0.0.1:6379> lrem key 4 v4   # list中元素中的个数没有命令中的数量,会全部删除返回删除的个数
(integer) 0
127.0.0.1:6379>

 ⑤ltrim(截取元素)、rpoplpush(移除指定集合中最后一个元素到一个新的集合中)操作

127.0.0.1:6379> lrange list2 0 -1  
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> ltrim list2 0 2   #通过下标截取指定的长度,这个list已经被改变了,只剩下我们所指定截取后的元素
OK 
127.0.0.1:6379> lrange list2 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> rpoplpush list2 list3  #移除list集合中的最后一个元素到新的集合newlist中,返回值是移除的最后一个元素值
"v2"
127.0.0.1:6379> lrange list3 0 -1
1) "v2"
127.0.0.1:6379>

 ⑥lset(更新)、linsert操作

127.0.0.1:6379> lrange list2 0 -1
1) "v4"
2) "v3"
127.0.0.1:6379> lset list2 1 v10    # 更新list中索引为1的元素为‘v10’
OK
127.0.0.1:6379> lrange list2 0 -1   # 查看证明操作成功
1) "v4"
2) "v10"
127.0.0.1:6379> lset list4 0 0
(error) ERR no such key
127.0.0.1:6379> lset list2 3 v3     # list不存在会报错
(error) ERR index out of range
127.0.0.1:6379> lrange list2 0 -1   # 索引不存在会报错
1) "v4"
2) "v10"
127.0.0.1:6379> linsert list2 after v10 v11  # 在list中元素为“v10”后面添加元素‘v11’
(integer) 3
127.0.0.1:6379> linsert list2 before v10 v9  # 在list中元素为“v10”前面添加元素‘v9’
(integer) 4
127.0.0.1:6379> lrange list2 0 -1
1) "v4"
2) "v9"
3) "v10"
4) "v11"
127.0.0.1:6379>

⑦ list的原理类似python中list(列表),有索引,有顺序,在两边插入或者改动值,效率最高

### Redis 支持的五种数据结构 #### String 类型 String 是最简单的类型,可以看作是一个字符串或者二进制安全的字节序列。除了存储简单字符串外,还可以用于计数器等场景。 ```python SET key value # 设置指定 key 的值 GET key # 获取指定 key 的值 INCR key # 将 key 中储存的数字值增一 DECR key # 将 key 中储存的数字值减一 ``` 对于对象类数据而言,在有频繁更新需求的情况下,直接使用 string 存储整个 JSON 或者其他形式的对象串确实不够灵活[^1]。 #### Hash 类型 Hash 数据类型允许对一系列字段进行分组管理,适合用来表示对象属性。内部通过 field-value 形式的键值对来组织数据,其中 field 和 value 都是字符串类型的。 ```python HSET user:1 name "Alice" # 向哈希表 user:1 中设置域 name 的值为 Alice HMSET user:2 age 28 city Beijing # 同时向多个字段赋值 HGETALL user:1 # 获取哈希表中所有的字段和值 ``` 这种设计使得 hash 成为了处理复杂对象的理想选择之一。 #### List 类型 List 表现为双向链表的形式,意味着可以从两端高效地插入或移除元素。适用于消息队列之类的场合。 ```python LPUSH mylist "world" # 在列表头部添加元素 RPUSH mylist "hello" # 在列表尾部添加元素 LRANGE mylist 0 -1 # 输出整个列表的内容 LPOP mylist # 移除并返回列表的第一个元素 RPOP mylist # 移除并返回列表最后一个元素 ``` 不过需要注意的是,当需要确保唯一性的时候,则应该考虑采用 set 来代替 list[^2]。 #### Set 类型 Set 实际上是一群独一无二的字符组成的集合,不允许重复项的存在。由于其特性非常适合做去重工作,并且提供了丰富的集合运算指令如交集、并集、差集等操作。 ```python SADD unique_set item1 # 添加新成员到集合里 SMEMBERS unique_set # 列举出所有成员 SCARD unique_set # 查看集合大小 SISMEMBER unique_set member # 测试某元素是否属于该集合 SINTER setA setB # 计算两个集合之间的交集 ``` 这些功能让 set 特别适合作为代表社交网络关系模型中的好友圈或者其他关联群体的关系表达工具[^4]。 #### Sorted Set (Zset) 类型 Sorted Set 不仅具备 set 的特点——即不会出现相同的分数对应不同的成员的情况;而且还能按照 score 排序,这使其能够轻松构建排行榜之类的应用程序逻辑。 ```python ZADD leaderboard 95.5 player1 # 给定分数给玩家排名 ZRANK leaderboard player1 # 查询特定用户的排名位置 ZSCORE leaderboard player1 # 得知具体得分情况 ZRANGEBYSCORE leaderboard min max # 根据分数范围获取区间内的用户名单 ``` 综上所述,每一种数据结构都有各自的优势领域,合理选用才能发挥最大效能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值