安装 1 2 3 4 5 6 7 8 9 10 11 12 docker pull redis:7.0.12 docker run --restart=always \ -p 6379:6379 \ --name myredis \ -v /home/dj/redis/redis.conf:/etc/redis/redis.conf \ -v /home/dj/redis/data:/data \ -d redis:7.0.12 redis-server /etc/redis/redis.conf docker exec -it 55a0b2d794ce /bin/bash redis-cli
常用操作命令
命令
解释
keys *
查看当前库所有 key (匹配:keys *1)
exists key
判断某个 key 是否存在
type key
查看你的 key 是什么类型
exists key
判断某个 key 是否存在
del key
删除指定的可以数据
unlink key
仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作
ttl key
查看还有多少秒过期,-1 表示永不过期,-2 表示已过期
select[0, 15]
命令切换数据库
move key dbindex
将当前数据库的 key 移动到指定数据库中
dbsize
查看当前数据库的 key 的数量
flushdb
清空当前库
flushall
通杀全部库
数据类型 String
String 是 Redis 最基本的类型,一个 key 对应一个 value。
String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象
String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512M
set 语法 1 SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
EX
seconds – 设置指定的过期时间,以秒为单位(正整数)
PX
毫秒 – 设置指定的过期时间,以毫秒为单位(正整数)。
EXAT
timestamp-seconds – 设置 key 过期的指定 Unix 时间,以秒为单位(正整数)。
PXAT
timestamp-milliseconds – 设置 key 过期的指定 Unix 时间,以毫秒为单位(正整数)。
NX
– 仅当 key 不存在时才设置该 key。
XX
– 仅设置已存在的 key。
KEEPTTL
– 保留 key 关联的生存时间。
GET
– 返回存储在 key 中的旧字符串,如果 key 不存在,则返回 nil。如果存储在键上的值不是字符串,则返回错误并 SET
中止错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # 基本使用 set k1 hello # 重新设置值并返回上一次的值 set k1 hello1 get # 已存在key 不会重新设置 返回nil set k1 hello nx # 存在key 重新赋值 set k1 hello nn # 不存在key 不会设置 返回nil set k2 hello nn # 设置过期时间戳秒为单位 set k2 hello exat 1669278765 # 设置过期时间为10秒 set k2 hello ex 10 # 重新设置值并保留过期时间 set k2 hello1 keepttl
其他命令
指令
解释
mset key1 value1 key2 value2
同时设置一个或多个 key-value 对
mget key1 key2 key3
同时获取一个或多个 value
msetnx key1 value1 key2 value2
同时设置一个或多个 key-value,当且仅当所有给定 key 都不存在,才会执行成功
getrange key
起始位置 结束位置 获得值的范围,类似 java 中的 substring,前包,后包
setrange key
起始位置 value 用 value 覆写 key 所储存的字符串值,从起始位置开始(索引从 0 开始)。
incr key
key 中储存的数字值增 1,只能对数字值操作,如果为空,新增值为 1
decr key
将 key 中储存的数字值减 1,只能对数字值操作,如果为空,新增值为-1
incrby / decrby key
步长 将 key 中储存的数字值增减。自定义步长
strlen key
获得值的长度
append key valu
将给定的 value 追加到原值的末尾
setnx key value
只有在 key 不存在时,设置 key 的值(分布式锁)
setex key 过期时间 value
设置键值的同时,设置过期时间,单位秒
getset key value
以新换旧,设置了新值同时获得旧值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 设置多个值 mset k1 text1 k2 text2 k3 100 # 获取多个值 mget k1 k2 k3 # 获得值的范围 tex getrange k1 0 2 # 覆写key所储存的字符串值 tabcd setrange k1 1 abcd # 数字增加1 101 incr k3 # 数字增加指定值 201 incrby k3 100 # 获得值的长度 5 strlen k2 # 将给定的value 追加到原值的末尾 text2abc append k2 abc
List
列表 list 是一个单键多值的
Redis 列表是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
常用命令
指令
解释
lpush key value
将元素加入列表左边
rpush key value
将元素加入列表右边
del key
删除 list
lrange key start end(0 -1)
按照索引下标获得元素(从左到右)(0-1 表示获取所有)
lpop key
删除列表最左边的元素,并将元素返回
rpop key
删除列表最右边的元素,并将元素返回
rpoplpush key1 key2
从 key1 列表右边吐出一个值,插到 key2 列表左边
lrem key n value
删除 n 个等于 value 的元素
lindex key index
按照索引下标获得元素(从左到右)
llen key
获得列表长度
iset key index value
给指定下标设置值
linsert key before/after value value1
在 value 前/后插入新的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # 将元素加入列表左边 lpush list1 1 2 3 4 5 6 # 将元素加入列表右边 rpush list2 1 2 3 4 5 6 # 获得列表长度 llen list1 # 按照索引下标获得元素 lrange lis1 0 -1 # 6 5 4 3 2 1 lrange lis2 0 -1 # 1 2 3 4 5 6 lrange lis2 0 1 # 1 2 # 删除列表最左边的元素,并将元素返回 lpop list1 # 删除列表最右边的元素,并将元素返回 rpop list1 # 删除列表 del list1 # 删除3个等于2的元素 lpush list1 2 2 2 2 1 4 5 lrem list1 3 2 lrange list1 0 -1 # 2 1 4 5 # 给指定下标设置值 lpush list3 1 2 3 iset list3 0 hello lrange list3 0 -1 # hello 2 3 # 在value前/后插入新的值 lpush list4 1 2 3 linsert list4 before 1 hello lrange list4 0 -1 # hello 1 2 3
Hash 常用命令
指令
解释
hset key field value
一次设置一个字段值
hget key field
一次获取一个字段值
hgetall key
获取所有字段值
hdel
删除一个 key
hlen
获取某个 key 内的全部数量
hkeys key
列出该 hash 集合的所有 field
hvals key
列出该 hash 集合的所有 value
hexists key field
是否存在该字段
hincrby key field increment
为哈希表 key 中的域 field 的值加上增量 1 -1
hsetnx key field value
当 field 不存在时,将哈希表 key 中的域 field 的值设置为 value
1 2 3 4 5 6 7 8 9 10 11 12 13 # 设置值 hset user:001 name jock age 18 address beijing # 获取值 hget user:001 age hget user:001 name # 是否存在某个field hexists user:001 age # 增加或减少数量 hincrby user:001 age 5 hincrby user:001 age -2
Set set 是可以自动排重的,不允许元素重复
常用命令
指令
解释
sadd key value1 value2
将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers key
取出该集合的所有值
srem key value1 value2
删除集合中的某个元素
sismember key value
判断集合 key 是否为含有该 value 值,有 1,没有 0
scard key
返回该集合的元素个数
spop key
随机从该集合中吐出一个值 ,会从集合中删除
srandmember key n
随机从该集合中取出 n 个值。不会从集合中删除
smove source destination value
把集合中一个值从一个集合移动到另一个集合
sinter key1 key2
返回两个集合的交集元素
sunion key1 key2
返回两个集合的并集元素
sdiff key1 key2
返回两个集合的差集元素(key1 中的,不包含 key2 中的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 添加元素 1 2 3 4 sadd set1 1 2 3 4 4 4 4 # 遍历 smembers set1 # 删除 srem set1 1 2 # 是否存在某个值 sismember set1 1 # 元素个数 scard set1 # 把集合中一个值从一个集合移动到另一个集合 sadd set2 a b c smove set1 set2 3 sismember set1 # 4 sismember set2 # a b c 3
Zset Redis 有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了
常用命令
指令
解释
zadd key score1 value1 score2 value2…
将一个或多个 member 元素及其 score 值加入到有序集 key 当中
zrange key start stop[WITHSCORES]
返回有序集 key 中,下标在 startstop 之间的元素 带 WITHSCORES,可以让分数一起和值返回到结果集
zrem key value
删除该集合下,指定值的元素
zrangebyscore key min max[WITHSCORES]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max)的成员。(从小到大排列)
zrevrangebyscore key max min[WITHSCORES]
同上,改为从大到小排列
zcard key
获取元素数量
zscore key menber
获取元素分数
zincrby key increment value
为元素的 score 加上增量
zcount key min max
统计该集合,分数区间内的元素个数
zrank key value
返回该值在集合中的排名,从 0 开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 添加 zadd zset1 60 z1 70 z2 80 z3 # 遍历 zrange zset1 0 -1 # 删除 zrem zset1 z1 # 获取元素分数 zscore zset1 z1 # 筛选分数为60-90之间 zrangebyscore zset1 60 90 # 筛选分数为60-90之间 不包含60 且只返回两个符合数据 zrangebyscore zset1 (60 90 limit 0 2
Bitmap 常用命令
指令
解释
时间复杂度
setbit key offset value
给指定 key 值的第 offset 赋值
0(1)
strlen key
返回占用字节大小
getbit key offset
获取 key 值的第 offset 位
0(1)
bitcount ket start end
返回指定 key 中[start, end]中为 1 的数量
0(n)
bitop operation destkey key
对不同的二进制存储数据进行位运算(AND OR NOT XOR)
0(n)
HyperLogLog 作用
1 2 3 (全集)={2,4,6,8,77,39,4,8,10} 去掉重复的内容 基数={2,4,6,8,77,39,10} = 7
基数统计:用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算。
常用命令
指令
解释
pfadd key element
添加指定元素
pfcount key
返回基础估算值
pfmerge destkey sourcekey sourcekey
将多个 HyperLogLog 合并为一个
1 2 3 4 5 6 7 8 9 10 # 添加指定元素 pfadd pf1 1 2 3 4 5 6 6 6 # 返回基础估算值 6 pfcount pf1 # 将多个HyperLogLog合并为一个 pfadd pf2 1 2 7 8 9 pfmerge pf3 pf2 pf1 pfcount pf3
GEO 地理空间,用于存放经纬度
常用命令
指令
解释
geoadd key longitude latitude member
多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中
geopos key member [member]
从键里面返回所有指定名称(member )元素的位置(经度和纬度),不存在返回 nil
geohash key member [member]
以 hash 加密的数据返回
geodist key member1 member2 [M|KM|FT|MI]
返回两个给定位置之间的距离 m-米 KM - 千米 FT - 英寸 MI - 英里
1 2 3 4 5 6 7 8 9 10 11 # 添加 geoadd city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" 116.024067 40.362639 "长城" # 获取 geopos city 天安门 故宫 长城 # hash加密返回 geohash city 天安门 故宫 长城 # 返回两个给定位置之间的距离 geodist city 天安门 故宫 km
持久化