Redis常用命令

1.通用命令

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

2.String结构

  • 介绍:存储字符串类型的key-value
  • 应用场景:验证码、计数器、订单重复提交、用户登录信息、商品详情(序列化json对象存储)、分布式锁
  • 注意:
    • 值的长度不能超过512MB;
    • key命名规范,不要过长,冒号分割,业务名:表名:ID
# 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亿个元素)
# 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多亿)
# 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
    • 大数据里面的用户画像标签集合
  • 注意:集合是通过哈希表实现的
# 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值将被反复覆盖,保留最后一次修改的结果
# 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

你可能感兴趣的:(Redis,redis,数据库,缓存)