目录
- 1 概念
- 2 key相关操作
- 3 常用value数据类型
- 3.1 String类型
- 3.2 List类型
- 3.3 Set类型
- 3.4 Hash类型
- 3.5 Zset类型
- 4 三种特殊类型
- 4.1 geospatial
- 4.2 Hyperloglog
- 4.3 Bitmaps
1 概念
redis存储的数据全部是以key-value
键值对存在的,所谓的redis数据类型是针对value
的类型;
2 key相关操作
- 判断是否存在key:
EXISTS [key]
; - 设置key的过期时间:
expire [key] [time]
单位是秒 - 查看过期时间:
ttl [key]
- 删除key:
del [key]
- 查看key的类型:
type [key]
3 常用value数据类型
3.1 String类型
- 追加
append [key] [value]
; - 获取长度
strlen [key]
; - 自增
incr [key]
; - 自减
decr [key]
; - 自增多个
incrby [key] 5
; - 自减多个
decrby [key] 6
; - 获得子串
GETRANGE [key] [start] [end]
;(左闭右闭,从0开始,为负就倒着数) - 按位置替换
setrange [key] [start] [value]
- 设置过期字符串:
setex [key] [time] [value]
- 不存在就设置:
setnx [key] [value]
- 批量添加:
mset k1 v1 k2 v2 k3 v3
- 批量获取:
mget k1 k2 k3
- 批量设置如果不存在msetnx(原子操作):
msetnx k1 v1 k4 v4
任意一个存在了就不存入成功; - 先获取再设置(常用于替换):
getset [key] [value]
String类型不仅可以是字符串,还可以是数字!
3.2 List类型
- 左边添加
LPUSH [listname] [value]
(注意这里的listname是列表名,列表里面存着value); - 获取列表的值
lrange [listname] [start] [end]
(可以使用负数,倒着数); - 右边添加
RPUSH [listname] [value]
; - 左边移除
LPOP [listname]
; - 右边移除
RPOP [listname]
; - 按照index获取
LINDEX [listname] [index]
; - 查看长度
LLEN [listname]
; - 移除指定值
LREM [listname] [nums] [value]
(从列表中移除多少个value) - 获得子list
LTRIM [listname] [start] [end]
(在原list上修改) - 右边pop出来,左边push进去:
RPOPLPUSH [src] [dist]
- 在指定元素前后插入
LINSERT [listname] [before|after] [valuesrc] [valuedis]
3.3 Set类型
- 添加
sadd [setname] [value]
- 查看所有元素
SMEMBERS [setname]
- 查看元素是否在里面
SISMEMBER [setname] [value]
- 获取集合元素个数
SCARD [setname]
- 移除元素
SREM [setname] [value]
- 随机返回一个元素
SRANDMEMBER [setname]
- 差集:
SDIFF [s1] [s2]
(s1中的元素除去s2中有相同的) - 交集:
SINTER [s1] [s2]
- 并集:
SUNION [s1] [s2]
3.4 Hash类型
- 存值
HSET hs h1 v1 h2 v2 h3 v3
- 取值
hget hs h1
……和redis的key-value操作大致相似,就是多嵌套了一层;
3.5 Zset类型
有序集合
- 添加元素
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
(在集合添加元素的时候需要添加得分) - 获取全部
ZRANGE [name] [start] [end]
- 根据分数获取元素
ZRANGEBYSCORE zs -inf +inf limit 0 2
(返回最小的两个值) - 固定区间的值
ZRANGEBYSCORE zs -inf 80
(得分小于80的) - 按照index返回区间的值
ZREVRANGE zs 2 3
(排序后的2-3个)
4 三种特殊类型
4.1 geospatial
地理位置加经纬度坐标;
-
geoadd
添加地理位置(经、纬度和位置名) -
geopos
获得位置的经纬度; -
geodist
返回两个给定位置之间的距离; -
georadius
:以给定经纬度为中心,找到某一半径内的元素; -
georadiusbymember
:找出指定范围内的元素,中心点是元素; -
geohash
:返回一个或多个位置元素的Geohash表示;
GEO底层使用zset,可以使用zset相关命令来操作geo
4.2 Hyperloglog
不重复的元素,
- 添加元素:
PFADD ip a b b b c
- 获得总数:
PFCOUNT ip
- 合并两个:
PFMERGE ip3 ip1 ip2
场景:添加元素,统计的时候自动去重;特点HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。
4.3 Bitmaps
位存储;
- 添加
setbit key offset value
- 获取
getbit key offset
- 统计
BITCOUNT key [start end]