Redis全局命令&数据结构详解

一、Redis 全局命令

1.查看所有键(该命令会遍历所有键,时间复杂度为O(n),生产环境不推荐使用

keys *

2.计算键总数(Redis内置键总数变量,时间复杂度为O(1) )

dbsize

3.确认键是否存在(1存在,0不存在)

exists key

4.删除键

del key [ key1 key2 ...]

5.设置过期时间

5.1 距离过期秒

expire key seconds

pexpire key milliseconds

5.2 时间戳过期

expireat key timestamp

pexpireat key millisecond-timestamp

5.3 清除过期时间

persist key

6.查看剩余过期时间(大于等于0剩余过期时间,-1未设置,-2不存在)

6.1 剩余秒数

ttl key

6.2 剩余毫秒数

pttl key

7.查看键的数据结构

type key

8.查询键的数据结构内部编码

object encoding key

9.键重命名

rename key newkey

确保只有 newkey 不存在时才重命名成功,确保不被强行覆盖

renamenx key newkey 

10.随机返回一个键

randomkey

11.迁移键

11.1 move

11.2 dump + restore

11.3 migrate 

12.遍历键

12.1 全量遍历

keys pattern

12.1 渐进遍历

 

 

 

 

二、Redis 数据结构

Redis提供了5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)

1.字符串(string)类型

该类型的值可以是字符串(包括简单的字符串、JSON、XML)数字(整数、浮点数)&二进制(图片、音频、视频),字符串最大不超过512MB。

1.1 相关命令

1.1.1 设置值

set key value [ex seconds] [px milliseconds] [nx | xx]

  • ex seconds 设置秒级过期时间
  • px millionsecond 设置毫秒级过期时间
  • nx 用于添加 键不存在添加成功
  • xx 用于更新 键必须存在才可以更新成功

除了set选项命令外,Redis还提供了setex & setnx命令:

setex key second value

setnx key value

(该命令可以作为分布式锁的一种实现方案,参考:Distributed locks with Redis (Redis官方实现分布式锁的方案)

1.1.2 获取值

get key

1.1.3 批量设置值

mset [key1 value key2 value2 ...]

1.1.4 批量获取值

mget [key1 key2 ...]

1.1.5 计数

incr key                                   //自增

decr key                                 //自减

incrby key increment             //自增指定数字

decrby key decrement          //自减指定数字

incrbyfloat key increment     //自增浮点数

1.1.6 追加值

append key value 

1.1.7 字符长度

strlen key

1.1.8 设置并返回原值

getset key value

1.1.9 设置指定位置的字符

setrange key offeset value

1.1.10 获取部分字符串

getrange key start end

1.2 内部编码

string 类型的内部编码包括 int、embstr、raw 三种,具体适用情况如下:

1.2.1 int 8字节长整型

1.2.2 embstr 小于等于39字节的字符串

1.2.3 raw 大于39字节的字符串

1.3 使用场景

1.3.1 缓存功能

1.3.2 计数工具

1.3.3 共享Session

1.3.4 安全限速

2.哈希(hash)类型

该类型的值本身又是一个键值对结构,如value={{field1,value1},{field2,value2},...},对应关系图如下:

2.1 相关命令

2.1.1 设置值

hset key [field1 value1 ...]

hsetnx key [field1 value1 ...]

2.1.2 获取值

hget key field

2.1.3 删除field

hdel key [field1 field2 ...]

2.1.4 计算field个数

hlen key

2.1.5 批量设置或获取field-value

hmset key [field1 value2 ...]

hmget key [filed1 field2 ...]

2.1.6 判断field是否存在

hexists key field

2.1.7 获取所有field

hkeys key

2.1.8 获取所有value

hvals key

2.1.9 获取所有filed-value

hgetall key

2.1.10 计数

hincrby key field increment

hincrbyfloat key field increment

2.1.11 计算value的字符串长度

hstrlen key field

2.2 内部编码

hash类型的内部编码包括ziplist、hashtable 两种,具体适用情况如下:

2.2.1 ziplist(压缩列表)优点:结构紧凑,节省内存

哈希类型fields个数小于hash-max-ziplist-entries配置(默认512个) &  field-value所有值都小于hash-max-ziplist-value配置(默认64字节)

2.2.2 hashtable (哈希表)优点:读写效率更高,复杂度为O(1)

2.3 使用场景

2.3.1 缓存用户信息

3.列表(list)类型

该类型是用来存储多个有序的字符串,列表类型特点包括有序性和可重复性。

3.1 相关命令

3.1.1 插入

a. 左插入

lpush key [value1 value2 ...]

b. 右插入

rpush key [value1 value2 ...]

c. 指定插入(before flag 前插入 | after flag 后插入)

linsert key before | after flag value

3.1.2 查找

备注:列表索引范围 左到右 [0, N-1]  右到左 [-1, -N]

a.指定范围元素

lrange key star end

b.指定索引元素

lindex key index

c.列表长度

llen key

3.1.3 删除

a.左删

lpop key

b.右删

rpop key

c.指定删除(count>0 由左至右删除 最多count个value元素 count<0 由右至左删除 最多|count|个value元素 count=0 删除所有value元素)

lrem key count value

d.裁剪截取(截取保留 lrange key star end 查询结果)

ltrim key star end 

3.1.4 修改指定索引的元素值

lset key index newValue

3.1.5 阻塞操作

blpop [key1 key2...] timeout

brpop [key1 key2...] timeout

备注:

a. timeout 阻塞时间(单位:秒)

b.当列表为空&阻塞时间timeout大于零,阻塞等待后返回 | 阻塞时间timeout等于零,一直阻塞

c.当列表非空,立刻返回

3.2 内部编码

列表类型的内部编码包括:ziplist、linkedlist、quicklist(Redis 3.2版本新增)

ziplist(压缩列表)

linkedlist(链表)

quicklist(压缩列表+链表)

3.3 使用场景

3.3.1 消息队列

Redis实现阻塞队列模型

 3.3.2 文章列表

//开发口诀
lpush + lpop = Stack 栈 
lpush + rpop = Queue 队列
lpush + ltrim = Capped Collection 有限集合
lpush + brpop = Message Queue 消息队列

4.集合(set)类型

该类型用来存储多个字符串元素,不可重复性和无序性是其主要特点。

4.1 相关命令

4.1.1 集合内操作

a. 添加

sadd key [element1 element2 ...]

b. 删除

srem key [element1 element2 ...]

c. 计数

scard key

d. 判断元素是否存在集合中(1存在 0不存在)

sismember key element

e. 随机从集合中选出N个元素

srandmember key count 

f. 随机从集合中弹出N个元素

spop key count

g. 获取所有元素

smembers key

4.1.2 集合间操作

a. 交集

sinter [key1 key2 ...]

b. 并集

sunion [key1 key2 ...]

c. 补集

sdiff [key1 key2 ...]

d. 交 | 并 | 补 结果保存

*****store destination [key1 key2 ...]

4.2 内部编码

集合类型的内部编码包括:intset、hashtable

4.2.1 intset(整数集合)

4.2.2 hasetable(哈希表)

4.3 使用场景

4.3.1 用户标签

5.有序集合(zset)类型

该类型

5.1 相关命令

5.2 内部编码

5.3 使用场景

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值