1. 通用命令
-
keys pattern
- 用法:
?
配置0或1个字符,*
匹配0或多个字符。 - 注意点:时间复杂度是
O(n)
的,数据量过大时,因为redis是单线程,会导致阻塞。 - 正确使用扫描keys:
- 从从备节点中进行操作。
- 使用
Scan
进行扫描。
- 用法:
-
dbsize
:计算key的总数,时间复杂度为O(1)
;- 概述:redis内存一直存储着一个变量,该变量用于计算当前redis中的key的数量。
-
exist key
:检查key是否存在。 -
del key
:删除指定key-value。 -
expire key seconds
:key在seconds秒后过期。 -
ttl key
:查看key在多少秒后过期。返回值 >= 0
:说明还是在有效期内。返回值 -1
: 说明永不过期。返回值 -2
:已经过期。
-
persist key
:去掉key的过期时间。 -
type key
:key对应value的类型。
2. 数据结构和内部编码
3. 单线程
- 简介
- 使用redis需要注意的地方
4. 数据类型
1. String
- 基础:
value最大不能超过512M
;value可以存放:字符串、数字、JSON、XML等。 - 场景:缓存、计数器、分布式锁。
2. Hash
- 结构
- 特点
- String和Hash的区别
1. String 若想一个键存储一个对象,需要JSON化这个对象才行;而Hash可以一个key对应多个field以及field对应的value(也就可以存储一个对象,且更加容易操作);
2. String可以对单个键设置过期时间;Hash无法针对某个field设置过期时间。
3. String更新一个对象,得整体更新;Hash更新一个对象,只需要更新field即可。
3. List
- 结构
- 特点
- 重要的API
ltrim:若是一次性删除key的话,数据量过大时,容易造成阻塞。使用ltrim则可以不断的删除小批量的数据,最后达到删除全部的数据。
- 使用技巧
4. Set
-
重要的API
- smembers:获取set中所有的元素,数据量过大容易造成阻塞,需要小心使用。可以使用
scan
来根据游标来获取数据。
- smembers:获取set中所有的元素,数据量过大容易造成阻塞,需要小心使用。可以使用
-
特点
- 无序、不重复、集合间可以进行操作。
-
实战
5. Zset
-
结构
-
Zset和不同集合之间的比较