Redis五大基本类型-List

本文详细介绍了Redis中List数据结构的常用命令,如Lpush/Lpop、LRANGE、LINDEX、LREM、LTRIM等,并展示了如何进行元素插入、删除、索引操作以及修剪和数据迁移。通过实例演示了如何在实际场景中高效利用这些功能。

List

这里边的所有命令都是一 ‘L’ 开头的

其实就是一个双向链表,可以使用linsert … before 和 linsert … after 在这个值的前边或者是后边插入值;还可以使用 lpush(left push) 和 rpush(right push)

如果key存在,增加数据或者删除数据;不存在就创建链表,添加数据

插入与删除

127.0.0.1:6379> lpush list one #在list中插入一个元素
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1 #查看可以看出,默认插入的方法的头插法
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpush list right #在这个list的尾部插入一个元素
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
================================================================================
127.0.0.1:6379> lpop list #移除顶部元素
"three"
127.0.0.1:6379> rpop list #移除尾部元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"

通过下标获取值

127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> lindex list 1
"one"

获取list的长度与移除指定的值

127.0.0.1:6379> lpush list three
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lpush list one
(integer) 4
127.0.0.1:6379> llen list # 查看list的长度
(integer) 4
127.0.0.1:6379> lrange list 0 -1 # 查看list中的值
1) "one"
2) "three"
3) "three"
4) "two"
127.0.0.1:6379> lrem list 1 two # 指定移除two
(integer) 1
127.0.0.1:6379> lrem list 2 three # 如果存在多个相同的value的时候,可以一起移除
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"

trim修剪

127.0.0.1:6379> rpush mylist aaa
(integer) 1
127.0.0.1:6379> rpush mylist bbb
(integer) 2
127.0.0.1:6379> rpush mylist ccc
(integer) 3
127.0.0.1:6379> rpush mylist ddd
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "aaa"
2) "bbb"
3) "ccc"
4) "ddd"
127.0.0.1:6379> ltrim mylist 1 2 #只要mylist中下标在1~2号之间的元素
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "bbb"
2) "ccc"

移除当前list的值,把它添加到另一个list中

127.0.0.1:6379> rpush mylist zkw
(integer) 1
127.0.0.1:6379> rpush mylist ls
(integer) 2
127.0.0.1:6379> rpush mylist zs
(integer) 3
127.0.0.1:6379> rpush mylist ww
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "zkw"
2) "ls"
3) "zs"
4) "ww"
127.0.0.1:6379> rpoplpush mylist outherlist # 组合命令,移除mylist中的最后一个元素,把它插入到outherlist中
"ww"
127.0.0.1:6379> lrange mylist 0 -1
1) "zkw"
2) "ls"
3) "zs"
127.0.0.1:6379> lrange outherlist 0 -1
1) "ww"

将list中的指定下标的值替换成另一个

127.0.0.1:6379> exists list # 判断是否存在这个list
(integer) 0
127.0.0.1:6379> lset list 0 redis # 如果list中当前的key存在值就更新,不存在就报错
(error) ERR no such key
127.0.0.1:6379> lpush list java
(integer) 1
127.0.0.1:6379> lindex list 0
"java"
127.0.0.1:6379> lset list 0 redis # 当前key存在值,就更新
OK
127.0.0.1:6379> lindex list 0
"redis"

在一个具体的value的前边或者是后边插入一个值

127.0.0.1:6379> lpush mylist love
(integer) 1
127.0.0.1:6379> linsert mylist before love I # 在love 的前边插入 I
(integer) 2
127.0.0.1:6379> linsert mylist after love you # 在love的后边插入 you
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "I"
2) "love"
3) "you"

<think>我们被要求提供Redis五大基本数据类型及其使用示例。根据之前的对话历史和引用内容,我们可以整理如下: Redis五大基本数据类型: 1. 字符串(String) 2. 列表(List) 3. 哈希(Hash) 4. 集合(Set) 5. 有序集合(Sorted Set / Zset) 我们将为每种数据类型提供简介、常用命令示例(使用Redis命令行格式)以及典型使用场景。 注意:引用[1][2][4]中提供了相关数据类型的介绍和命令,我们将参考这些内容。 具体回答结构如下: - 数据类型名称 - 简介(简要说明) - 常用命令示例(每个类型给出2-3个最常用的命令示例) - 使用场景(1-2个典型场景) 开始编写回答:</think>### Redis 五大基本数据类型及使用示例 #### 1. 字符串(String)[^1][^2][^4] **简介**: 最基本的数据类型,可存储文本、数字或二进制数据(最大 512MB)。 **常用命令示例**: ```bash # 设置键值 > SET user:1001 "Alice" OK # 数值增减(计数器场景) > INCR article:2001:views # 文章浏览量+1 (integer) 1 # 批量操作 > MSET product:1001:name "iPhone" product:1001:price 5999 OK ``` **使用场景**: - 缓存 HTML 片段 `SET page:/home "<html>..."` - 分布式锁 `SET lock:order true NX EX 30` --- #### 2. 列表(List)[^2][^4] **简介**: 双向链表结构,支持左右插入/弹出元素,元素可重复。 **常用命令示例**: ```bash # 消息队列实现 > LPUSH chat:1001 "Hello!" # 左侧插入消息 (integer) 1 > RPOP chat:1001 # 右侧消费消息 "Hello!" # 最新动态展示 > LPUSH user:1001:feeds "New post: Redis教程" # 插入动态 > LRANGE user:1001:feeds 0 4 # 查看最新5条动态 1) "New post: Redis教程" ``` **使用场景**: - 微博时间线 `LPUSH user:1001:timeline "新动态"` - 任务队列 `RPOP task:queue` --- #### 3. 哈希(Hash)[^2][^4] **简介**: 键值对集合,适合存储对象属性。 **常用命令示例**: ```bash # 存储用户对象 > HSET user:1001 name "Bob" age 28 email "bob@example.com" (integer) 3 # 部分更新 > HINCRBY user:1001 age 1 # 年龄+1 (integer) 29 # 批量获取 > HMGET user:1001 name age 1) "Bob" 2) "29" ``` **使用场景**: - 用户资料存储 `HGETALL user:1001` - 商品属性管理 `HSET product:2001 stock 50` --- #### 4. 集合(Set)[^2][^4] **简介**: 无序且唯一的元素集合,支持交集/并集操作。 **常用命令示例**: ```bash # 标签系统 > SADD article:3001:tags "数据库" "NoSQL" "缓存" (integer) 3 # 共同关注计算 > SADD user:1001:follows "UserA" "UserB" > SADD user:1002:follows "UserA" "UserC" > SINTER user:1001:follows user:1002:follows # 交集 1) "UserA" ``` **使用场景**: - 抽奖参与者 `SADD lottery:2024 user100 user101` - 商品筛选 `SINTER tag:电子产品 tag:折扣商品` --- #### 5. 有序集合(Sorted Set)[^2][^4] **简介**: 带分值的唯一元素集合,按分值排序。 **常用命令示例**: ```bash # 游戏排行榜 > ZADD leaderboard 3500 "PlayerA" 4200 "PlayerB" (integer) 2 > ZREVRANGE leaderboard 0 2 WITHSCORES # TOP3 1) "PlayerB" 2) "4200" 3) "PlayerA" 4) "3500" # 延时任务 > ZADD tasks 1640995200 "send_email_1001" # 2022-12-31到期 > ZRANGEBYSCORE tasks -inf 1640995200 # 获取到期任务 ``` **使用场景**: - 热搜榜单 `ZINCRBY hot:search 1 "Redis教程"` - 优先级队列 `ZADD tasks 1 "low_priority" 3 "urgent"` > 更多命令参考:[Redis 官方命令文档](https://redis.io/commands/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值