Redis是key-value数据库,key一般是字符串型,value可以是其他的
String、Hash、List、、Set、SortedSet(五个基本类型)GEO、BitMap、HyperLog
官方文档Commands | Docs
层级格式
结构
key允许有多个单词形成层级结构,多个单词之间用:隔开,格式如下:
可以将对象序列化为JSON字符串后存储
避免id冲突
通用命令
MSET
可以一次设置多个键值对的命令,属于原子性操作,要么成功,要么失败
KEYS
查看符合末班的所有key(不建议生产环境)
DEL
有中括号,可以删除多个
EXISTS
也可以一对多
判断是否存在
EXPIRE
给key设置有效期,有效期到期时key会被删除
TTL
查看剩余有效期
-2相当于已经删除了
-1相当于永久有效
String类型
意味着它的value是字符串,不过根据字符串的格式不同,又可以分为string、int、float。无论哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型空间不超过512m
基础命令
SET
设置一个值(覆盖已有值)
GET
取值
批量操作
MSET
一次设置多个值
MGET
设置时间
SETEX
设置值 + 过期时间
秒级过期
PSETEX
毫秒级过期
SETNX key value
仅当 key 不存在时才设置(常用于分布式锁)
数字操作
INCR
自增加1
DECR
自减1
INCRBY
自增n
DECRBY
自减n
INCRBYFLOAT
自增浮点数
字符串追加与长度
APPEND
往原值后追加内容
STRLEN
获取字符串长度
子串操作
GETRANGE key start end
按范围取子串
SETRANGE key offset value
从偏移位置开始覆盖写入(不会删除之后的内容)
GETSET
GETSET key newValue
返回旧值,同时设置新值
set key value nx==setnx
setex同理
List类型
可以看做一个双向链表结构,或者也可以说很像双端队列,既可以支持正向检索,也可以支持反向检索。所以它是有序、可重复、插入和删除快、查询速度一般
添加元素
LPUSH key value [value ...]和RPUSH key value [value ...]
分别是向列表左边和右边添加数据,同时返回最后一个值
- LPUSH mylist a b c → 列表变 [c,b,a] 返回c
- RPUSH mylist a b c → [a,b,c] 返回c
复制代码 删除元素
LPOP key和RPOP key
顾名思义就是对于列表分别从左和从右删除元素,并且返回元素
列表是[a,b,c]
- LPOP mylist → 列表变 [b,c]返回a
- RPOP mylist → 列表变[a,b]返回c
复制代码 LREM key count value
移除列表中与 value 匹配的元素,这里的count意思是从头开始三处几个value
- LREM mylist 2 a → 从头开始删除 2 个 a
复制代码 获取元素
LINDEX key index
获取指定索引的元素(0为头,-1为尾)
LRANGE key start stop
获取指定区间的元素(包含 start 和 stop)
- LRANGE mylist 0 -1 → 获取所有
复制代码 修改插入元素
LSET key index value
设置指定索引的值
LINSERT key BEFORE|AFTER pivot value
在 list 中找到 pivot(基准值),然后把新元素插入到它 前面(BEFORE) 或 后面(AFTER)。
- LINSERT mylist BEFORE "b" "x"
复制代码 那么这时候可能会有人要问,如果有多个怎么办,不用担心,它只会匹配第一个出现的。所以引出一个思考:应该怎么解决想要特定的值呢?个人建议可以加一个唯一标识,比如id这种
弹出元素
BLPOP key [key ...] timeout和BRPOP key [key ...] timeout
分别是阻塞弹出左边和右边元素,timeout 秒。timeout是等待,因为不可能一直等下去,如果没有元素就会等待timeout
- BLPOP mylist 5
- BRPOP mylist 5
复制代码 长度
LLEN key
获取列表长度
LTRIM key start stop
裁剪列表,只保留指定区间
- LTRIM mylist 0 9 → 只保留前 0-9的元素,包括start和stop
复制代码 Hash类型
也叫散列,其value是一个无序字典,类似于Java中的HashMap结构
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
基础操作
HSET key field value
设置一个字段的值,
HGET key field
获取一个字段值
HDEL key field [field ...]
删除一个或多个字段
HEXISTS key field
字段是否存在
然后就会发现,hash相比于string前面只是多了一个h,这还是很好记的,然后多了一个field,其实可以直接当做map一样理解就可以了
批量操作
HMSET key field value [field value ...](8.0 之后推荐 HSET 多字段)
- HMSET user:1 name "tom" age 18
复制代码 HMGET key field [field ...]
HGETALL key
返回所有字段和值
遍历操作
HKEYS key
返回所有字段名
HVALS key
返回所有字段值
HLEN key
返回字段数量
数字操作(字段里的数字也能自增)
HINCRBY key field increment
HINCRBYFLOAT key field increment
- HINCRBYFLOAT wallet balance 8.5
复制代码 HSETNX key field value
作用参考string版,当然过期的话只能用EXPIRE,不存在HSETEX这
Set类型
可以看成value为null的HashMap,也是一个Hash表。所以它是无序、元素不可重复、查找快、支持交集、并集、差集等功能。如果是学过C++的小伙伴,千万不要和STL里面的Set搞混了。
添加元素
SADD key member [member ...]
删除元素
SREM key member [member ...]
判断是否存在
SISMEMBER key member
- SISMEMBER myset a # 1 或 0
复制代码 获取所有元素
SMEMBERS key
获取元素数量
SCARD key
返回随机元素(不删除)
SRANDMEMBER key [count]
count是返回的个数
- SRANDMEMBER myset # 返回一个
- SRANDMEMBER myset 3 # 返回三个(可重复)
复制代码 随机弹出(返回并删除)
SPOP key [count]
- SPOP myset # 随机删除并返回
- SPOP myset 2
复制代码 交集
SINTER key [key ...]
保存交集
SINTERSTORE key destkey
- SINTERSTORE result set1 set2
复制代码 并集
SUNION key [key ...]
保存并集
SUNIONSTORE result set1 set2
差集(属于 A 不属于 B)
SDIFF key [key ...]
差集合并
- SDIFFSTORE result set1 set2
复制代码 扫描
SSCAN key cursor [MATCH pattern] [COUNT count]
SortedSet类型
可排序、查询速度快、元素不重复
添加 / 更新元素
ZADD key score member [score member ...]
添加或者更新成员的 score。
- ZADD rank 100 user1
- ZADD rank 200 user2 150 user3
复制代码 获取元素(按排名或分数)
ZRANGE key start stop [WITHSCORES]
按 score 从小到大 + 按 rank 获取元素。
- ZRANGE rank 0 -1 WITHSCORES
复制代码 ZREVRANGE key start stop [WITHSCORES]
按 score 从大到小。
按 score 区间查询
ZRANGEBYSCORE key min max [WITHSCORES]
按 score 范围查成员。
- ZRANGEBYSCORE rank 100 200
复制代码 ZREVRANGEBYSCORE key max min
倒序版。
获取排名 / 分数
ZSCORE key member
查看某成员分数。
ZRANK key member
成员在 升序 排名中的位置(0-based)。
ZREVRANK key member
下降序排名。
删除相关
ZREM key member [member ...]
删除成员。
ZREMRANGEBYSCORE key min max
按 score 删除。
ZREMRANGEBYRANK key start stop
按排名删除。
计数相关
ZCARD key
获取成员数量。
ZCOUNT key min max
统计 score 在范围内的数量。
修改 score
ZINCRBY key increment member
让成员 score 增加/减少。
集群/集合操作
ZINTERSTORE destination numkeys key [key ...]
多个 ZSet 求交集并存储。
ZUNIONSTORE destination numkeys key [key ...]
多个 ZSet 求并集并存储。
可以搭配 WEIGHTS、AGGREGATE 做更复杂权重计算。
其它常用
ZPOPMax / ZPOPMin
弹出 score 最大/最小的成员。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |