文章目录
- 1. 通用命令
- 2. 数据结构和内部编码
- 3. 单线程
- 4. 数据类型
- 1. String
- 2. Hash
- 3. List
- 4. Set
- 5. Zset
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
来根据游标来获取数据。
- 特点
- 无序、不重复、集合间可以进行操作。
- 实战
5. Zset
- 结构
- Zset和不同集合之间的比较