下面的数据类型是指 value 的类型
通过官网
通过 redis 自己
help @关键字
查看所有 key
keys *
查看 key 是否存在
exists key
查看 key 的类型
type key
删除 key
del key
异步删除 key
unlink key
此指令先在 keyspace 中删除 key,随后异步真正删除数据
设置 key 的超时时间
expire key 10
切换数据库
select 数据库号
数据库号 0-15,一共 16 个
查看当前库中 key 的数量
dbsize
清空当前库
flushdb
清空所有库
flushall
数据结构 & 特性
Simple Dynamic String
,相当于 ArrayList
ArrayList
,通过分配冗余空间的方式防止频繁分配内存空间适用场景与应用
单一存取
SET key value
GET key
批量存取
MSET key1 value1 key2 value2
MSET key1 key2
自增自减
INCR key
INCRBY key n
DECR key
DECRBY key n
获取长度
STRLEN key
追加
APPEND KEY value
用于将 value 追加到 KEY 原 value 的后面
value 截取
GETRANGE key start end
获取值的子串,包含 start、end
value 插入
SETRANGE key index value
将 value 插入原值 index 位置
原子存
SETNX key value
SET key value 超时 标记
SETNX
也只有批量版本 MSETNX
超时存
SETEX key expire value
存 key 时同时设置超时时间
复写存
SETGET key value
存 key 时同时用 value 替换原始值
查询超时
TTL key
数据结构 & 特性
zipList
和 hash 表
Map>
Map
的部分才是 hash适用场景与应用
对象存储
可以使用 hash 或 string(存 json str)
但如果需要对对象进行频繁修改并需要被其他调用者知道,应该使用 hash
购物车(小型电商)
下面的 key = prefix:userid,比如 shopcar:u1234
新增商品 hset key prodid count
添加商品数量 hset key prodid 1
商品总数 hlen key
全选 hgetall key
单一存取
HSET key field value
HGET key field
批量存取
HMSET key field1 value1 field1 value1
HMGET key field1 field2
较新版本中可以使用
HSET key field1 value1 field1 value1
替代HMSET key field1 value1 field1 value1
获取所有字段
HGETALL key
获取所有字段和值
获取 key 中全部 field 数量
HLEN key
查看 key 中是否具有 field
HEXISTS key field
获取 key 中全部 field
HKEYS key
只获取所有字段
获取 key 中全部 value
HVALS key
字段自增
HINCRBY key field n
key 的 field 字段增加 n
删除 key
HDEL
原子增加 field
HSETNX key field value
数据结构 & 特性
quickList
quickList
,即压缩列表 zipList
的链表quickList
zipList
作为双向链表的 node 用前后指针串起来LRANGE
没有 RRANGE
适用场景与应用
简易消息队列(双向列表)
文章推送、关注列表、消息盒子 LPUSH msg:userid messageid
左右存
LPUSH key value1 value2
RPUSH key value1 value2
左右取(注意不是读,取后元素会移除)
LPOP key
RPOP key
左右取多个
LPOP key count
RPOP key count
相当于循环多次取,因此对 [1,2,3,4,5] 进行 RPOP key 2
得到 5,4
获取指定范围的元素 list
LRANGE key start end
[start,end] 是要获取的范围
索引 -1 表示最后一个元素
获取 key 长度
LLEN key
获取指定位置的元素
LINDEX key index
修改指定位置的元素
LSET key index value
以元素为坐标插入
LINSERT key before/after value new_value
右侧弹出插入左边
RPOPLPUSH key1 key2
从 key1 的右侧弹出元素,并插入 key2 左侧
左删除
LREM key n value
从左侧删除 n 个指定的 value
数据结构 & 特性
dist 字典
,即 hash 表适用场景与应用
用于各种社交场景或活动
抽奖、红包
SADD candidates 1
SPOP candidates 1
点赞(需要记录谁点的,可取消)
SADD article:id userid
SREM article:id userid
SMEMBERS article:id
SCARD article:id
SISMEMBER article:id userid
共同关注的项目
SINTER watch:userid1 watch:userid1
watch:userid1 = 用户 1 的关注列表
共同关注项目的人
SINTER watch.friens:userid1 watch:project1
watch:project = 关注项目 1 的人
或 SISMEMBER watch:userid2 projectid
可能认识的人(推送 A 认识但 B 不认识的)
SDIFF friends.userid1 friends.useri2
增删元素
SADD key member1 member2
SREM key member1 member2
获取所有元素
SMEMBERS key
是否包含元素
SISMEMBER key member
元素个数
SCARD key
随机查元素(不删)
SRANDMEMBER key conut
随机获取元素(删)
SPOP key count
元素移动至其他集合
SMOVE source_key dest_key value
是否包含元素
SISMEMBER key member
取交集
SINTER set1 set2
取并集(A+B)
SUNION set1 set2
取差集(属于左但不属于右,A-B)
SDIFF set1 set2
数据结构 & 特性
skipList
Map>
适用场景与应用
榜单
ZINCRBY hotest:id 1 member
(点赞时,有排名)
ZREVRANGE prods max min
按销量、关注度等排序
增删元素
ZADD key score1 member1 score2 member2
ZREM key member1 member2
查看分数
ZSCORE key member
元素加分
ZINCRBY key score member
排序并按分数区间返回(分页)
ZRANGEBYSOCRE key min max
ZREVRANGEBYSOCRE key min max
按排序区间返回
ZRANGE key start end
ZRANGE key start end withsocres
ZREVRANGE key start end withsocres
元素排名(正序、倒序)
ZRANK key member
ZREVRANK key member
按排名删
ZREMRANGEBYRANK key start stop
获取所有元素
SMEMBERS key
元素个数
ZCARD key
分数范围内元素个数
ZCOUNT key min max
数据结构 & 特性
bit[]
使用
bit[]
的效果适用场景与应用
标记位、进度标记(多个准备工作同时具备后可以进行下一步)、游戏存档
适用于每个记录单元仅有两个状态的记录、统计工作,相对传统 set 可以节省大量空间
- 但若数据量不大,且有大量 0 则不适用(因为用不用无所谓)
- 同时,极大数据量时,可能位操作的寻址有较大开销,但及其节省空间(可以理解为 64 倍或更多)
设置位
SETBIT key offset 1/0
把 key 的 offset 位设置为 1/0
注意,当偏移量很大时,可能比较慢
获取位
GETBIT key offset
统计位
COUNTBIT key
COUNTBIT key start end
统计 key 中值为 1 的 bit 位的个数
可以指定开始、结束位
- 左右都包含
- 支持负数
- 按 byte 为单位
COUNTBIT key 0 1
是统计 key 中前两个字节中 bit 位为 1 的个数
位运算操作
BITOP command result_key key1 key2 ...
对后续的位进行位运算
command 包括
数据结构 & 特性
适用场景与应用
适用于基数问题
基数问题
基数问题是指需要在去重的基础上进行统计的问题
比如 独立访客(UV,Unique Visitor)、独立 IP 数、搜索记录数等
原始的基数问题可以通过下面方式解决
基数增
PFADD key value1 value2 value3...
增加的时候会自动去重
基数统计
PFCOUNT key
基数合并
PFMERGE result_key key1 key2
将 key1 key2 的基数合并到 result_key
数据结构 & 特性
适用场景与应用
关于经纬度二维坐标的场景
GEO 是 Geographic(地理) 的缩写
坐标增
GEOADD key 经度 纬度 name...
经纬度和 name 可以同时添加多个
有效经纬度 [-180,180],两极不能直接添加
取坐标
GEOPOS key name
坐标模
GEODIST key name1 name2 unit
计算 key 中 name1 name2 两个地点的直线距离
可以指定距离的单位 unit
坐标半径搜索
GEORADIUS key 经度 纬度 radius unit
以指定的经纬度为中心、radius 为半径,查找范围内的元素
可以指定半径的单位 unit
查看配置
config get xx
如
config get dir
查看当前启动目录,一些文件会输出到这些目录上
config get requirepass
查看当前的密码
修改配置
config set config value
手动持久化
rdb
save