Redis常用命令

1.通用命令

bash 复制代码
# exists 判断key是否存在
exists key
# del 删除key
del key
# type 判断key类型
type key
# ttl 查看key存活时间
ttl key

2.String结构

  • 介绍:存储字符串类型的key-value
  • 应用场景:验证码、计数器、订单重复提交、用户登录信息、商品详情(序列化json对象存储)、分布式锁
  • 注意:
    • 值的长度不能超过512MB;
    • key命名规范,不要过长,冒号分割,业务名:表名:ID
bash 复制代码
# set/get 设置和获取key-value
set key value
get key
# mset/mget 批量设置或获取多个key的值
mset key1 value1 key2 value2
mget key1 key2
# incr 对key对应的值进行加1操作,并返回新的值
set num 0
incr num
# incrby 将key对应的数字加increment。如果key不存在,操作之前key就会被置为0
incrby num 5
# setex 设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期,原子操作
setex expre 5 value
# setnx 将key设置值为value,如果key不存在等同set命令。当key存在时什么也不做,是set if not exists的简写
setnx key 1
# getset 设置key的值,并返回key旧的值
getset key haha

3.List结构

  • 介绍:
    • 字符串列表,按照插入顺序排序
    • 双向链表,插入删除时间复杂度O(1)快,查找为O(n)慢
  • 应用场景:简单队列、最新评论列表、非实时排行榜:定时计算榜单,如手机日销榜单
  • 注意:
    • 通常添加一个元素到列表的头部(左边)或者尾部(右边)
    • 存储的都是String字符串类型
    • 支持分页操作,高并发项目中,第一页数据都是来源list,第二页和更多信息则是通过数据库加载
    • 一个列表最多可以包含2^32-1个元素(每个列表不超过40亿个元素)
bash 复制代码
# lpush 将一个或多个值插入到列表头部
lpush list 1 2 3
# rpop 移除并获取列表最后一个元素
rpop list
# llen 获取列表长度
llen list
# lindex 通过索引获取列表中的元素
lindex list 0
# lrange 获取key对应的list的指定下标范围的元素,其中0表示列表的第一个元素,1表示列表的第二个元素,-1表示获取所有元素(lrange key 0 -1)
lrange list 0 -1
# rpush 在key对应的list的尾部添加一个元素
rpush list 4 5
# lpop 从key对应的list的头部删除一个元素,并返回该元素
lpop list
# brpop 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
 brpop list 5
# lrem 移除元素,可以指定移除个数
lrem list 3 1

4.Hash结构

  • 介绍:是一个String类型的field和value的映射表,hash特别适合用于存储对象
  • 应用场景:购物车存储、用户对象、商品详情
  • 注意:每个hash可以存储2^32-1键值对(40多亿)
bash 复制代码
# hset 设置key指定的哈希集中指定字段的值
hset entity name zhangsan
# hget 返回key指定的哈希集中该字段所关联的值
hget entity name
# hgetall 返回key指定的哈希集中所有的字段和值
hgetall entity
# hdel 从key指定的哈希集中移除指定的field
hdel entity sex
# hexists 返回hash里面field是否存在
hexists entity name
# hincrby 增加key指定的哈希集中指定字段的数值,如果是-1,则是递减
hincrby entity age 3
# hmset 设置key指定的哈希集中指定字段的值
hmset entity sex m age 10
# hmget 返回key指定的哈希集中指定字段的值
hmget entity sex name

5.Set结构

  • 介绍:将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略
  • 应用场景:
    • 去重
    • 社交应用关注、粉丝、共同好友、统计网站的PV、UV、IP
    • 大数据里面的用户画像标签集合
  • 注意:集合是通过哈希表实现的
bash 复制代码
# sadd 添加一个或多个指定的member元素到集合的key中,指定的一个或者多个元素member如果已经在集合key中存在则忽略
sadd set a b c
# scard 返回集合存储的key的基数(集合元素的数量)
scard set
# sdiff 返回的集合元素是第一个key的集合与后面所有key的集合的差集
sdiff set set2
# sinter 返回指定所有的集合的成员的交集
sinter set set2
# sismember 返回成员member是否是存储的集合key的成员
sismember set a
# srem 在key集合中移除指定的元素,如果指定的元素不是key集合中的元素则忽略
srem set a
# sunion 返回给定的多个集合的并集中的所有成员
sunion set set2
# smembers 返回key集合所有的元素
smembers set

6.SortedSet结构

  • 介绍:
    • 使用HashMap+跳表skipList保证数据存储和有序
    • 用于将一个或多个成员元素及其分数值加入到有序集当中
    • 如果某个成员已经是有序集的成员,那么更新这个成员的分数值,分数值可以是整数值或双精度浮点数
    • 有序集合可以看作是在Set集合的基础上为集合中的每个元素维护了一个顺序值score,它允许集合中的元素可以按照score进行排序
  • 跳跃表:性能堪比红黑树,而且实现起来比红黑树简单很多
  • 应用场景:
    • 实时排行榜:商品热销榜、体育类应用热门球队、积分榜
    • 优先级任务、队列
    • 朋友圈文章点赞-取消,逻辑:用户只能点赞或取消,统计一篇文章被点赞了多少次,可以直接取里面有多少个
  • 注意:
    • 底层使用了Ziplist压缩列表和"跳跃表"两种存储结构
    • 如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果
bash 复制代码
# zadd 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zadd score 59 zhangsan 65 lisi
# zcard 获取有序集合的成员数
zcard score
# zcount 计算在有序集合中指定区间分数的成员数
zcount score 0 60
# zincrby 有序集合中对指定成员的分数加上增量increment
zincrby score 10 lisi
# zrange 通过索引区间返回有序集合指定区间内的成员,成员的位置按分数值递增(从小到大)来排序
zrange score 0 60
# zrevrange 通过索引区间返回有序集合指定区间内的成员,成员的位置按分数值递减法(从大到小)来排序
zrevrange score 0 -1
# zrevrank 返回有序集合中 指定成员的排名,有序集成员按分数值递减(从大到小)排序
zrevrank score lisi
# zrank 返回有序集key中成员member的排名,其中有序集成员按score值递增(从小到大)顺序排列
zrank score lisi
# zrem 移除有序集合中的一个或多个成员
zrem score lisi
# zscore 返回有序集合中成员的分数值
zscore score lisi
相关推荐
hao_wujing11 分钟前
攻击模型的恶意行为检测
网络·数据库·php
秃头摸鱼侠1 小时前
MySQL查询语句(续)
数据库·mysql
MuYiLuck1 小时前
【redis实战篇】第八天
数据库·redis·缓存
睡觉待开机1 小时前
6. MySQL基本查询
数据库·mysql
�FENG2 小时前
Redis 安装配置和性能优化
redis·持久化
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩2 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
Ares-Wang2 小时前
负载均衡LB》》HAproxy
运维·数据库·负载均衡