本章节大致分为以下几种:
- 通用API的介绍
- 简单介绍5种不同数据结构
一、通用API
- 查找key
keys
[keys *] 遍历所有的key
[keys he*] 查找以he开头的key,类似于正则表达式的通配符概念
注意:keys命令为O(n)复杂度,一般不建议在生产环境中使用,建议使用scan命令,或者在热备
从节点中使用。
- 查看redis存储keys数量
dbsize
[dbsize] 命令时间复杂度仅为O(1),因为redis在内部维护了一个计数器,因此,可以放心在生产
环境中使用。
- 判断keys是否存在
exists key
[存在]:返回 1
[不存在]:返回 0
- 删除key
del key :删除指定的 key 命令,可删除多个key
[成功]:返回 1
[不成功] :返回 0
- 设置过期时间
expire key seconds
[expire] :设置过期时间
[ttl] :查询剩余过期时间 :返回 -2 即代表key不存在,内部执行了del 命令
[persist] : 取消过期时间
- 查看key类型
type key
O(1)级别命令
二、数据结构以及内部编码
内部编码redis 是单线程为什么还这么快?
- 基于内存,响应速度很快
- 非阻塞IO
- 避免线程切换和竞态消耗
单线程使用注意事项:
- 一次只能执行一条命令
- 拒绝长(慢)命令
- 其实并不是完全单线程(AOF)
字符串
注意:字符串类型的value 不能超过 512M
场景:缓存/计数器/分布式锁
set key :设置
get key :获取
incr key : 对key 进行自增 1 ,如果之前不存在,则会创建key。
decr key : 自减操作
incrby key k :自增某个值
decrby key k :自减某个值
以上命令时间复杂度均为O(1)
setnx key value :假如key 不存在,才设置
setxx key value :key存在,才设置
setex :设置过期时间,原子操作
mget key1,key2:批量获取,原子操作(时间复杂度:O(n))
mset key1,key2 :批量设置(时间复杂度:O(n))
getset key newValue: set key newValue 并且返回旧的value
append key value :追加value 值
strlen key :返回字符串的长度(注意中文)
incrbyfloat key k:增加浮点数
getrange key start end :获取字符串指定下标的值
setrange key start end :指定下标获取新的值
hash
注意:field 不能相同,value可以相同
hget key field:获取hash key 的field对应的value值
hset key field value :设置 hash key
hdel key field :删除field
hexists key field : 判断field是否存在
hlen key : 获取field总数
hgetall key:获取所有的key field
hvals key: 获取hash key 对应所有field 的value
hkeys key : 获取所有的fileds
hmget key field1 field 2: 获取多个field值
hmset key field1 value1 field2 value2:批量设置多个field 值
list
有序,可以重复
rpush key value1 value2 valueN:从列表右端插入
loush key value1 value2 valueN :从列表左端插入
linsert key before/after value newValue :在list 指定的值前/后插入新元素,时间复杂度为O(n)
lpop key :从左边弹出一个元素
rpop key :从右边弹出一个元素
lrem key count value:根据count值,从列表中删除所有value相等的值,count 根据传值正负0删除的个数不同
ltrim key start end:根据索引范围修剪列表,时间复杂度为O(n)
lrange key start end (包含end) :获取列表指定所索引范围内的item
lindex key index:获取列表指定索引的item
llen key :获取长度 (时间复杂度为O(1))
lset key index newValue :设置列表指定索引为新的值
可实现TimeLine 时间轴功能
blpop key timeout :lpop 阻塞版本,timeout是阻塞超时时间,0代表永远不阻塞
brpop key timeout :rpop 阻塞版本,timeout是阻塞超时时间,0代表永远不阻塞
[注意] lpush +lpop = Stack
lpush +rpop = Queue
lpush +brpop = message queue
set
无序,无重复
sadd key element :向集合中添加元素,如果元素已经存在,则添加失败
srem key element :删除集合中的某个元素
scard :查看集合中的元素
sismember :判断元素是否存在于集合内
srandommember :从集合中随机取出一个元素,不会破坏原集合,可返回多个元素
smembers :取出集合中所有元素 (无序 ,使用需小心)
sinter :取交集
sdiff :取 差集
sunion :取并集
zset
有序集合,引入了score 字段来保持有序性。
集合:无序,可重复,element
有序集合:有序,不可重复,element +score,score 是可以重复的
zadd key score element (可以是多对):添加score 和element,时间复杂度为O(logn)
zscore key element 返回元素的分数
zincrby key increScore element 增加或减少元素的分数
zcard key 返回元素的个数
zcount key minScore maxScore :返回有序集合内在指定分数范围内的个数
可以利用有序集合实现排行榜功能
网友评论