Redis 数据类型与命令使用
Redis 命令不区分大小写,存入 Redis 的 key 值区分大小写。
Redis 中所有 key-value 都储存在 Redis-Object 中,Redis-Object 主要信息有:
- 数据类型(type)
- String (字符串)
- Hash (散列表)
- List (有序可重复集合)
- Set (无序不可重复集合)
- Sorted Set (有序不可重复集合,简称zset)
- Bitmap (位图)
- HyperLogLog (统计)
- GEO (地理)
- 编码方式(encoding)
- raw
- int
- ht
- zipmap
- linkedlist
- ziplist
- intset
-
数据指针(ptr)
-
虚拟内存(vm)
- …………..
一、Redis 基础命令
# 测试链接是否 OK(PONG 为成功) ping # 输出 redis echo redis # 退出客户端 quit # 持久化到本地 save bgsave # 查看当前键空间中数据量 dbsize # 切换键空间,默认为 0 select 0 # 数据移动 move key db # 清除当前键空间数据(info 中的 Keyspace) flushdb # 清除所有键空间数据 flushall # 密码认证 auth 密码 # 查看帮助命令 help @list help @string help @set help @zset help @hash help @generic # 查看版本信息 # 在外部 redis-server -v # 已连上 Redis,查看系统信息(Keyspace 显示每个键空间中的数据数量) info
二、Redis Key 通用命令
# 添加字符串类型 a-abc set a abc # 添加哈希类型 a-abc hset hsah hahaha zhangsan # 删除 a-abc,返回 1 成功,0 失败 del a # * 匹配任意数量的任意符号,? 配合-个任意符号,[] 匹配一个指定符号 # 查询所有,尽量避免使用,会锁住数据库,阻塞其它请求,可使用 scan 代替 keys * # 查询所有以 it 开头 keys it* # 查询所有以 hm 结尾 keys *hm # 查询所有前面两个字符任意,后面以 hma 结尾 keys ??hm # 查询所有以 user: 开头,最后一个字符任意 keys user:? # 查询所有以 u 开头,以 er:1 结尾,中间包含一个字母,s 或 t keys u[st]er:1 # 判断是否存在,返回 1 为存在,0 为不存在 exists a # 设置 a 的生命周期为 10 秒 expire a 10 pexpire a 10 expireat a 10 pexpireat a 10 # 切换 key 从时效性转换为永久性 persist key # 查看这条数据的生存时间,单位秒,返回 -1 为不过期,-2 表示 key 不存在 ttl a pttl a # 查看键 a 对应 value 的数据类型 type a # 随机获取 key 的值 randomkey # 重命名 key,把 a 命名为 b,会覆盖已存在的 key rename a b # 重命名 key,如果 b 存在会重命名失败 renamenx a b # 对所有 key 排序 sort
三、数据操作命令
String
# 添加字符串类型 a-abc,成功返回 OK set a abc # 添加字符串类型 a-abc,存活时间 100秒 setex a 100 abc # 添加字符串类型 a-abc,存活时间 10000 毫秒(10秒) psetex a 10000 abc # 获取指定下表字符串---(abc),闭合空间,包前后边界 getrange a 0 2 # 设置新值,返回旧值---(abc) getset a zxc # 设置多个值 a-abc,z-zxc mset a abc z zxc # 获取多个值 mget a z # 添加字符串类型 a-abc,键 a 存在会设置失败 setnx a abc # 添加字符串类型 a-abc,其中一个 key 存在就会全部设置失败(有原子性) msetnx a abc z zxc # 获取字符串长度---(3) strlen a # key 对应 value 为数值,value 会加一 set s 21 incr s # key 对应 value 为数值,value 会加制定数量 set s 21 incrby s 100 # 同上为减操作 decr decrby # 在 key 对应 value 的末尾添加字符串,会返回添加后的字符串 append a xyz
Hash
# 给 key 为 map 的键值设置键为 name 值为 jim hset map name jim hset map age 18 # 年龄加一 hincrby map age 1 # 判断 key 对应 value 是否有存在的 key,有返回 1,无返回 0 hexisit map name # 获取 key 对应 value 中的 key 对应的值,不存在返回 nil hget map name # 获取 key 对应 value 中的所有键值对 hgetall map # 获取 key 对应 value 中的所有 key hkeys map # 获取 key 对应 value 中的所有 value hvals map # 获取 key 对应 value 中的键值对数量 hlen map # 获取多个 hmget map name age # 设置多个 hmset map sex nan phone 1234568798 # 删除 key 对应 value 中的键值对 hdel map phone sex # 若 map 中存在 name 会添加失败 hsetnx map name newjim
List
# 向列表左边添加元素 lpush list 1 2 3 4 5 6 7 8 9 10 # 向列表右边添加元素 rpush list 1 2 3 4 5 6 7 8 9 10 # 获取长度 llen list # 查看列表,栈("10" "9" " 8"),0 -1 可以查看全部 lrange list 0 2 # 设置指定下标元素 (10->100) lset list 0 100 # 获取指定下标元素 ("5") lindex list 5 # 移除第一个元素,并返回(100) lpop list # 移除最后一个元素,并返回(1) rpop list
Set,Hash 实现,复杂度 O(1)
# 添加 sadd set a b c d # 会失败,set 是不可重复集合 sadd set a # 获取集合长度 4 scard set # 获取集合中所有元素 smembers set # 随机获取指定个数的元素,不会删除元素 srandmember set 2 # 判断元素是否在集合中,返回 1 是,返回 0 不是 sismember set a # 移除指定元素 srem set a b # 从集合中随机弹出一个元素,元素不删除 srandmember set # 从集合中随机弹出一个元素,出一个删一个 spop set # 获取差集 sadd set1 c d e f # ("b" "a") sdiff set set1 # ("f" "e") sdiff set1 set # 获取交集 ("c" "d") sadd set1 c d e f sinter set set1 # 获取并集 ("d" "f" "b" "a" "c" "e") sadd set1 c d e f sunion set set1
Sorted Set,通过分数保证顺序,Hash 实现,复杂度 O(1)
# 添加 zadd sortedset 100 a 200 b 300 c # 删除 zrem sortedset a # 按照排名范围删除元素 zremrangebyrank sortedset 0 220 # 元素个数---(3) zcard sortedset # 获得指定分数范围内的元素个数---(2) zcount sortedset 0 220 # 获取元素分数---(100) zscore sortedset a # 查看分数区间的元素个数---(2) zcount sortedset 0 220 # 获取元素排名,从小到大 zrank sortedset a ---(0) zrank sortedset b ---(1) zrank sortedset c ---(2) # 获取元素排名,从大到小 zrevrank sortedset a ---(2) # 增加元素分数 zincrby sortedset 1000 a # 按照元素分数从小到大的顺序 返回索引从 start 到 stop 之间的所有元素---("b" "c" "a") zrange sortedset 0 10 # 同上,会带上分数---("b" 200 "c" 300 "a" 1100) zrange sortedset 0 10 withscores # 获取指定分数范围的元素 zrangebyscore sortedset 0 220 [WITHSCORES] [LIMIT offset count]
BitMaps
可以应用于信息状态统计
# 设置第 888 位为 1,之前位上的数据会都补成 0 setbit bits 888 1 # 获取指定位上的值,不存在会返回 0 getbit bits 888 1 # 对指定key按位进行交并、非异或操作,并将结果保存到 destKey 中 # 位运算:and:交、or:并、not:非、xor:异或 bitop op destKey key1 [key2...] # 统计指定 key 中 1 的数量 bitcount key [start end]
HyperLogLog
统计不重复数据的数量(基数统计,基数是数据集去重后元素个数)
HyperLogLog 是用来做基数统计的,运用了 LogLog 的算法
# 添加数据 # pfadd key element[element...] pfadd hll 001 pfadd hll 001 pfadd hll 002 pfadd hll 003 # 统计数据 # pfcount key [key...] pfcount hll # 合并数据 # pfmerge destkey sourcekey [sourcekey...]
用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据
核心是基数估算算法,最终数值存在一定误差
误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值
耗空间极小,每个 hyperloglog key 占用了 12K 的内存用于标记基数
pfadd 命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大
Pfmerge 命令合并后占用的存储空间为 12K,无论合并之前数据量多少
GEO
地理信息,计算两点之间距离(直线水平距离,没有高度概念)
# 添加坐标点 # geoadd key longitude latitude member[longitude latitude member...] geoadd zhongguo 1 1 beijing geoadd zhongguo 2 2 shanghai geoadd zhongguo 3 3 guangzhou geoadd zhongguo 4 4 shengzhen # 获取坐标点 # geopos key member(member...] # 计算坐标点距离 # geodist key member1 member2 [unit] geodist zhongguo beijing shanghai km # 根据坐标求范围内的数据 # georadius key longitude lati tude radius m|km|ft|mi [withoord] [withdist] [withhash] [count count] georadius zhongguo 1.5 1.5 88 km # 根据点求范围内数据 # georadiusbymember key member radius m|km|ft|mi [withoord] [withdist] [withhash] [count count] georadiusbymember zhongguo 2,2 130 km # 获取指定点对应的坐标 hash 值 # geohash key member [member...]
位置非精确计算
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步