redis基础2——key的基础使用、五大数据类型和三大特殊数据类型
文章目录
- 一、Key的基础使用
- 1.1 更换数据库
- 1.2 查看数据库大小
- 1.3 查看数据库所有key
- 1.4 清除当前数据库
- 1.5 清除所有数据库
- 1.6 判断key是否存在
- 1.7 移动key
- 1.8 设置key的过期时间
- 1.9 查看key的数据类型
- 二、五大数据类型
- 2.1 字符串型(string)
- 2.1.1 设置key值
- 2.1.1.1 普通赋值
- 2.1.1.2 不存在才赋值
- 2.1.1.3 批量赋值
- 2.1.1.4 原子性批量赋值
- 2.1.1.5 设置对象
- 2.1.1.6 追加
- 2.1.2 获取key值
- 2.1.2.1 普通取值
- 2.1.2.2 先取值再赋值
- 2.1.2.3 获取key值长度
- 2.1.5 自增自减
- 2.1.5.1 自增一个值
- 2.1.5.2 自减一个值
- 2.1.5.3 设置步长自增
- 2.1.5.4 设置步长自减
- 2.1.6 范围取值
- 2.1.7 替换字符串
- 2.1.8 设置过期时间
- 2.2 集合(set)
- 2.2.1 赋值
- 2.2.2 取值
- 2.2.2.1 所有元素
- 2.2.2.2 判断元素是否存在
- 2.2.2.3 获取集合里元素个数
- 2.2.2.4 取随机元素
- 2.2.2.5 差集
- 2.2.2.6 交集
- 2.2.2.7 并集
- 2.2.3 删除
- 2.2.3.1 指定元素
- 2.2.3.2 随机元素
- 2.2.4 移动
- 2.3 列表(list)
- 2.3.1 赋值
- 2.3.1.1 从左插入
- 2.3.1.2 从右插入
- 2.3.1.3 元素前后插入
- 2.3.1.4 指定下标赋值
- 2.3.2 取值
- 2.3.2.1 查看所有元素
- 2.3.2.2 查看指定下标位元素
- 2.3.2.3 查询列表元素个数
- 2.3.2.4 查询列表是否存在
- 2.3.3.删除
- 2.3.3.1 从左删除
- 2.3.3.2 从右删除
- 2.3.3.3 删除指定元素
- 2.3.4 截取
- 2.3.4.1 截取下标范围的元素
- 2.3.5 移动
- 2.3.5.1 移除列表最后一个元素到新列表中(组合命令)
- 2.4 哈希(hash)
- 2.4.1 赋值
- 2.4.1.1 单个哈希
- 2.4.1.2 多个哈希
- 2.4.1.3 不存在才赋值
- 2.4.1.4 自增
- 2.4.2 取值
- 2.4.2.1 单个哈希
- 2.4.2.2 多个哈希
- 2.4.2.3 获取集合内所有键值对
- 2.4.2.4 获取所有key
- 2.4.2.5 获取所有value
- 2.4.2.6 获取集合内的key数量
- 2.4.2.7 判断集合内的key是否存在
- 2.4.3 删除
- 2.4.3.1 删除指定key
- 2.5 有序集合(zset)
- 2.5.1 赋值
- 2.5.2 取值
- 2.5.2.1 正序查询指定下标范围元素
- 2.5.2.2 倒叙查询指定下标范围元素
- 2.5.2.3 查询集合内的元素个数
- 2.5.2.4 查询区间元素数量
- 2.5.3 排序
- 2.5.3.1 正序
- 2.5.3.2 倒序
- 三、三种特殊数据类型
- 3.1 geospatial地理位置
- 3.1.1 赋值
- 3.1.1.1 添加
- 3.1.2 取值
- 3.1.2.1 key内元素
- 3.1.2.2 经纬度
- 3.1.2.3 两个位置的距离
- 3.1.2.4 半径内的元素
- 3.1.2.4.1 返回元素名称
- 3.1.2.4.2 返回元素名称+中心距离
- 3.1.2.4.3 返回元素名称+经纬度
- 3.1.2.4.4 限制返回元素个数
- 3.1.2.4.5 降序排序
- 3.1.2.4.6 升序排序
- 3.1.2.5 指定范围内的元素
- 3.1.2.6 经纬度字符串
- 3.1.3 删除
- 3.1.3.1 指定元素
- 3.2 HyperLogLog基数
- 3.2.1 基数作用
- 3.2.2 概述
- 3.2.3 赋值
- 3.2.3.1 添加元素
- 3.2.4 取值
- 3.2.4.1 获取基值
- 3.2.5 合并
- 3.2.5.1 并集合并
- 3.3 Bitmap位图
- 3.3.1 赋值
- 3.3.1.1 单项赋值
- 3.3.2 取值
- 3.3.2.1 单项取值
- 3.3.2.2 统计
一、Key的基础使用
- redis默认有16个数据库,默认使用第0个数据库。
1.1 更换数据库
select
1.2 查看数据库大小
dbsize
1.3 查看数据库所有key
keys *
1.4 清除当前数据库
flushdb
1.5 清除所有数据库
flushall
1.6 判断key是否存在
exists
1.7 移动key
move
1.8 设置key的过期时间
expire
1.9 查看key的数据类型
type
二、五大数据类型
2.1 字符串型(string)
字符串型使用场景比较多,比如抖音粉丝数这种就可以实现,也还可以做计数器、统计多单位的数量、对象缓存存储。
2.1.1 设置key值
2.1.1.1 普通赋值
set
- set同一个key时,会覆盖之前的值。
2.1.1.2 不存在才赋值
setnx
2.1.1.3 批量赋值
mset
2.1.1.4 原子性批量赋值
msetnx:要么一起成功,要么一起失败,体现原子性。
2.1.1.5 设置对象
设置一个对象:set [对象] {条目1:内容1,条目2:内容2}
设置多个对象:set [对象1] {条目1:内容1,条目2:内容2} [对象2] {条目1:内容1,条目2:内容2}
2.1.1.6 追加
append
2.1.2 获取key值
2.1.2.1 普通取值
get
2.1.2.2 先取值再赋值
getset
2.1.2.3 获取key值长度
strlen
2.1.5 自增自减
2.1.5.1 自增一个值
incr
2.1.5.2 自减一个值
decr
2.1.5.3 设置步长自增
incrby
2.1.5.4 设置步长自减
decrby
2.1.6 范围取值
getrange
2.1.7 替换字符串
setrange
2.1.8 设置过期时间
setex =set with expire,单位为秒。
setex key seconds value =set key value ex seconds。单位为秒。
2.2 集合(set)
应用场景:共同关注、共同好友。
2.2.1 赋值
sadd
- 用redis客户端连接显示效果
- set 集合里不能存在相同的值,插入相同值会失败。
2.2.2 取值
2.2.2.1 所有元素
smembers
2.2.2.2 判断元素是否存在
sismember
2.2.2.3 获取集合里元素个数
scard
2.2.2.4 取随机元素
srandmember
2.2.2.5 差集
sdiff
2.2.2.6 交集
sinter
2.2.2.7 并集
sunion
2.2.3 删除
2.2.3.1 指定元素
srem
2.2.3.2 随机元素
spop
2.2.4 移动
smove
2.3 列表(list)
在redis里,可以把List当成栈、队列来使用。
list是一个链表,可以从左往右插入,也可以从右往左插入,还可以左右两边同时插入。
如果key不存在,会创建新的链表。
若把里面的所有元素移除,空链表也代表不存在。
从两边插入或改动值,效率最高;从中间元素操作,效率低。
使用场景:消息队列。
2.3.1 赋值
2.3.1.1 从左插入
lpush
- 从左插入一个值
- 从左插入多个值
2.3.1.2 从右插入
rpush
2.3.1.3 元素前后插入
linsert
2.3.1.4 指定下标赋值
lset
2.3.2 取值
2.3.2.1 查看所有元素
lrange
2.3.2.2 查看指定下标位元素
lindex
2.3.2.3 查询列表元素个数
llen
2.3.2.4 查询列表是否存在
exists
2.3.3.删除
2.3.3.1 从左删除
lpop,删除下标位为0的元素,也是最后进入的元素。
2.3.3.2 从右删除
rpop,删除下标位最末端的元素,也是第一个插入列表的元素。
2.3.3.3 删除指定元素
lrem
2.3.4 截取
2.3.4.1 截取下标范围的元素
ltrim
2.3.5 移动
2.3.5.1 移除列表最后一个元素到新列表中(组合命令)
rpoplpush
2.4 哈希(hash)
哈希是一个map集合,可以把它的key看成一个集合,而集合里是kv键值对的数据,类似 key- < key-value >,常用于对象存储。
2.4.1 赋值
2.4.1.1 单个哈希
hset
- redis客户端展示效果
2.4.1.2 多个哈希
hmset
2.4.1.3 不存在才赋值
hsetnx
2.4.1.4 自增
hincrby,哈希没有自减命令,用自增负数实现自减。
2.4.2 取值
2.4.2.1 单个哈希
hget
2.4.2.2 多个哈希
hmget
2.4.2.3 获取集合内所有键值对
hgetall
2.4.2.4 获取所有key
hkeys
2.4.2.5 获取所有value
hvals
2.4.2.6 获取集合内的key数量
hlen
2.4.2.7 判断集合内的key是否存在
hexists
2.4.3 删除
2.4.3.1 删除指定key
hdel
- 删除一个key
- 删除多个key
2.5 有序集合(zset)
应用场景:抖音排行榜
2.5.1 赋值
zadd
- redis客户端显示效果
2.5.2 取值
2.5.2.1 正序查询指定下标范围元素
zrange,可以把显示的结果看成一个从上往下排序的列表,正向排序就是从上往下数。
2.5.2.2 倒叙查询指定下标范围元素
zrevrange
2.5.2.3 查询集合内的元素个数
zcard
2.5.2.4 查询区间元素数量
zcount
2.5.3 排序
2.5.3.1 正序
zrangebyscore
- 负无穷到正无穷,-inf,+inf
- 排序结果带上分数
- 只取结果小于特定值的元素(3000)
- 排序结果只取0到1条
2.5.3.2 倒序
三、三种特殊数据类型
3.1 geospatial地理位置
3.1.1 赋值
3.1.1.1 添加
geoadd
作用:将给定的空间元素(纬度、经度、地名)添加到指定的键里面。
语法: geoadd key longitude latitude member…
- geoadd 命令以标准的x,y格式接受参数,使用时必须先输入经度,然后再输入纬度。
- geoadd 能够记录的坐标是有限的,非常接近地球两极区域的经纬度无法被索引。
- 有效的经度介于 -180 ~ 180 度之间,有效的纬度介于 -85.05112878 ~ 85.05112878 度之间。当输入超出范围的经度或者纬度时,geoadd将返回一个错误。
- 这些数据会以有序集的形式被储存在键里面,从而使得 georadius 和georadiusbymember 这样的命令可以在之后通过位置查询取得这些元素。
应用场景:附近位置、微信摇一摇、滴滴打车等这类依赖于地理位置信息的功能。
3.1.2 取值
3.1.2.1 key内元素
zrange
用法:geo 的数据类型为 zset,可以用zrange取key内元素。
3.1.2.2 经纬度
geopos
作用:从Key里取给定位置元素的经度、维度。
语法:geopos key member [member1 member2 ]
3.1.2.3 两个位置的距离
geodist
作用:取两个给定位置之间的距离。如果两个位置之中,有一个不存在,则命令返回空值。
语法:geodist key member1 member2 [unit]
指定单位的参数 unit 必须是以下单位的其中一个:
- m :表示单位为米
- km :表示单位为千米
- mi :表示单位为英里
- ft :表示单位为英尺
- 如果没有指定单位,geodist默认使用米作为单位。
- geodist在计算距离时,会假设地球为完美的球形,在极限情况下,这一假设最大会造成0.5%的误差。
3.1.2.4 半径内的元素
georadius
作用:取以给定的经纬度为中心,给定半径内的元素。
语法:georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc] [desc] [count count]
3.1.2.4.1 返回元素名称
3.1.2.4.2 返回元素名称+中心距离
withdist (参数)
3.1.2.4.3 返回元素名称+经纬度
withcoord(参数)
3.1.2.4.4 限制返回元素个数
count (参数)
3.1.2.4.5 降序排序
desc(参数)
3.1.2.4.6 升序排序
asc(参数)
3.1.2.5 指定范围内的元素
georaidusbymember
作用:取出指定范围内的元素,中心点是由给定的位置元素决定。
语法:georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc] [desc] [count count]
3.1.2.6 经纬度字符串
geohash
作用:将二维经纬度转换为一维字符串,字符串越长表示位置更精确,两个字符串越相似表示距离越近。
语法:geohash key member [member1] [member2]
3.1.3 删除
3.1.3.1 指定元素
zrem
用法:GEO 没有提供删除成员的命令,但是因为 GEO 的底层实现是 zset,所以可以借用 zrem 命令实现对地理位置信息的删除。
3.2 HyperLogLog基数
3.2.1 基数作用
作用:用于集合,指集合中不重复的元素个数,可以接受误差。
示例:
A{1,3,5,7,9,8,7} ,基数为6。
B{1,3,5,7},基数为4。
3.2.2 概述
背景:redis在2.8.9版本添加了hyperloglog结构,用来做基数统计的算法。
优点:在输入元素的数量或体积非常大时,计算基数所需的空间总是固定的,并且是很小的。每个HyperLogLog键只占用12KB的内存,就可以计算接近2^64个不同元素的基数。
用途:HyperLogLog是一种算法,提供了不精确的去重计数方案。 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
应用场景:
- 统计网页的浏览用户数量,一天内同一个用户多次访问只算一次。传统方案是使用set来保存用户id,然后统计set中的元素数量。
- 传统方案只能承载少量用户,一旦用户数量大起来就需要消耗大量的空间。
- 传统方案更偏重于保存用户,而非统计用户数量,使用传统方案可以达到目的,但吃力不讨好,而使用HyperLogLog最多需要12K就可以统计大量的用户数。
- 尽管HyperLogLog大概有0.81%的错误率,但对于统计用户数量这种不需要很精确的数据是可以忽略不计的。
3.2.3 赋值
3.2.3.1 添加元素
pfadd
语法:pfadd key element [element…]
3.2.4 取值
3.2.4.1 获取基值
pfcount
语法:pfcount key [key1 key2 …]
3.2.5 合并
3.2.5.1 并集合并
pfmerge
语法:pfmerge destkey sourcekey [sourcekey1 sourcekey2…]
3.3 Bitmap位图
背景:Redis 从 2.2 版本增加了 Bitmap(位图)。
应用场景:
- 可以统计用户一年的某些信息,如账户活跃或不活跃,登录或不登录,打卡或没打卡。如果使用普通的 key / value存储,则要记录 365 条记录,如果用户量很大,需要的空间也会很大。而Redis 提供了 Bitmap 位图这种数据结构,Bitmap 就是通过操作二进制位来进行记录,即为 0 和 1。
- 如果要记录 365 天的打卡情况,使用 Bitmap 表示的形式大概如下:0101000111000111……,这样 365 天相当于 365 bit,又 1 字节 = 8 bit , 所以相当于使用 46 个字节即可。
- BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。
3.3.1 赋值
3.3.1.1 单项赋值
setbit
语法:setbit key offset value 。设置key的第offset位为value(0或1)
3.3.2 取值
3.3.2.1 单项取值
getbit
语法:getbit key offset
- 获取 offset 设置的值,未设置过默认返回 0。
3.3.2.2 统计
bitcount
语法:bitcount key [start,end] 统计key上位的值为1的个数。
redis基础2——key的基础使用、五大数据类型和三大特殊数据类型
文章目录
- 一、Key的基础使用
- 1.1 更换数据库
- 1.2 查看数据库大小
- 1.3 查看数据库所有key
- 1.4 清除当前数据库
- 1.5 清除所有数据库
- 1.6 判断key是否存在
- 1.7 移动key
- 1.8 设置key的过期时间
- 1.9 查看key的数据类型
- 二、五大数据类型
- 2.1 字符串型(string)
- 2.1.1 设置key值
- 2.1.1.1 普通赋值
- 2.1.1.2 不存在才赋值
- 2.1.1.3 批量赋值
- 2.1.1.4 原子性批量赋值
- 2.1.1.5 设置对象
- 2.1.1.6 追加
- 2.1.2 获取key值
- 2.1.2.1 普通取值
- 2.1.2.2 先取值再赋值
- 2.1.2.3 获取key值长度
- 2.1.5 自增自减
- 2.1.5.1 自增一个值
- 2.1.5.2 自减一个值
- 2.1.5.3 设置步长自增
- 2.1.5.4 设置步长自减
- 2.1.6 范围取值
- 2.1.7 替换字符串
- 2.1.8 设置过期时间
- 2.2 集合(set)
- 2.2.1 赋值
- 2.2.2 取值
- 2.2.2.1 所有元素
- 2.2.2.2 判断元素是否存在
- 2.2.2.3 获取集合里元素个数
- 2.2.2.4 取随机元素
- 2.2.2.5 差集
- 2.2.2.6 交集
- 2.2.2.7 并集
- 2.2.3 删除
- 2.2.3.1 指定元素
- 2.2.3.2 随机元素
- 2.2.4 移动
- 2.3 列表(list)
- 2.3.1 赋值
- 2.3.1.1 从左插入
- 2.3.1.2 从右插入
- 2.3.1.3 元素前后插入
- 2.3.1.4 指定下标赋值
- 2.3.2 取值
- 2.3.2.1 查看所有元素
- 2.3.2.2 查看指定下标位元素
- 2.3.2.3 查询列表元素个数
- 2.3.2.4 查询列表是否存在
- 2.3.3.删除
- 2.3.3.1 从左删除
- 2.3.3.2 从右删除
- 2.3.3.3 删除指定元素
- 2.3.4 截取
- 2.3.4.1 截取下标范围的元素
- 2.3.5 移动
- 2.3.5.1 移除列表最后一个元素到新列表中(组合命令)
- 2.4 哈希(hash)
- 2.4.1 赋值
- 2.4.1.1 单个哈希
- 2.4.1.2 多个哈希
- 2.4.1.3 不存在才赋值
- 2.4.1.4 自增
- 2.4.2 取值
- 2.4.2.1 单个哈希
- 2.4.2.2 多个哈希
- 2.4.2.3 获取集合内所有键值对
- 2.4.2.4 获取所有key
- 2.4.2.5 获取所有value
- 2.4.2.6 获取集合内的key数量
- 2.4.2.7 判断集合内的key是否存在
- 2.4.3 删除
- 2.4.3.1 删除指定key
- 2.5 有序集合(zset)
- 2.5.1 赋值
- 2.5.2 取值
- 2.5.2.1 正序查询指定下标范围元素
- 2.5.2.2 倒叙查询指定下标范围元素
- 2.5.2.3 查询集合内的元素个数
- 2.5.2.4 查询区间元素数量
- 2.5.3 排序
- 2.5.3.1 正序
- 2.5.3.2 倒序
- 三、三种特殊数据类型
- 3.1 geospatial地理位置
- 3.1.1 赋值
- 3.1.1.1 添加
- 3.1.2 取值
- 3.1.2.1 key内元素
- 3.1.2.2 经纬度
- 3.1.2.3 两个位置的距离
- 3.1.2.4 半径内的元素
- 3.1.2.4.1 返回元素名称
- 3.1.2.4.2 返回元素名称+中心距离
- 3.1.2.4.3 返回元素名称+经纬度
- 3.1.2.4.4 限制返回元素个数
- 3.1.2.4.5 降序排序
- 3.1.2.4.6 升序排序
- 3.1.2.5 指定范围内的元素
- 3.1.2.6 经纬度字符串
- 3.1.3 删除
- 3.1.3.1 指定元素
- 3.2 HyperLogLog基数
- 3.2.1 基数作用
- 3.2.2 概述
- 3.2.3 赋值
- 3.2.3.1 添加元素
- 3.2.4 取值
- 3.2.4.1 获取基值
- 3.2.5 合并
- 3.2.5.1 并集合并
- 3.3 Bitmap位图
- 3.3.1 赋值
- 3.3.1.1 单项赋值
- 3.3.2 取值
- 3.3.2.1 单项取值
- 3.3.2.2 统计
一、Key的基础使用
- redis默认有16个数据库,默认使用第0个数据库。
1.1 更换数据库
select
1.2 查看数据库大小
dbsize
1.3 查看数据库所有key
keys *
1.4 清除当前数据库
flushdb
1.5 清除所有数据库
flushall
1.6 判断key是否存在
exists
1.7 移动key
move
1.8 设置key的过期时间
expire
1.9 查看key的数据类型
type
二、五大数据类型
2.1 字符串型(string)
字符串型使用场景比较多,比如抖音粉丝数这种就可以实现,也还可以做计数器、统计多单位的数量、对象缓存存储。
2.1.1 设置key值
2.1.1.1 普通赋值
set
- set同一个key时,会覆盖之前的值。
2.1.1.2 不存在才赋值
setnx
2.1.1.3 批量赋值
mset
2.1.1.4 原子性批量赋值
msetnx:要么一起成功,要么一起失败,体现原子性。
2.1.1.5 设置对象
设置一个对象:set [对象] {条目1:内容1,条目2:内容2}
设置多个对象:set [对象1] {条目1:内容1,条目2:内容2} [对象2] {条目1:内容1,条目2:内容2}
2.1.1.6 追加
append
2.1.2 获取key值
2.1.2.1 普通取值
get
2.1.2.2 先取值再赋值
getset
2.1.2.3 获取key值长度
strlen
2.1.5 自增自减
2.1.5.1 自增一个值
incr
2.1.5.2 自减一个值
decr
2.1.5.3 设置步长自增
incrby
2.1.5.4 设置步长自减
decrby
2.1.6 范围取值
getrange
2.1.7 替换字符串
setrange
2.1.8 设置过期时间
setex =set with expire,单位为秒。
setex key seconds value =set key value ex seconds。单位为秒。
2.2 集合(set)
应用场景:共同关注、共同好友。
2.2.1 赋值
sadd
- 用redis客户端连接显示效果
- set 集合里不能存在相同的值,插入相同值会失败。
2.2.2 取值
2.2.2.1 所有元素
smembers
2.2.2.2 判断元素是否存在
sismember
2.2.2.3 获取集合里元素个数
scard
2.2.2.4 取随机元素
srandmember
2.2.2.5 差集
sdiff
2.2.2.6 交集
sinter
2.2.2.7 并集
sunion
2.2.3 删除
2.2.3.1 指定元素
srem
2.2.3.2 随机元素
spop
2.2.4 移动
smove
2.3 列表(list)
在redis里,可以把List当成栈、队列来使用。
list是一个链表,可以从左往右插入,也可以从右往左插入,还可以左右两边同时插入。
如果key不存在,会创建新的链表。
若把里面的所有元素移除,空链表也代表不存在。
从两边插入或改动值,效率最高;从中间元素操作,效率低。
使用场景:消息队列。
2.3.1 赋值
2.3.1.1 从左插入
lpush
- 从左插入一个值
- 从左插入多个值
2.3.1.2 从右插入
rpush
2.3.1.3 元素前后插入
linsert
2.3.1.4 指定下标赋值
lset
2.3.2 取值
2.3.2.1 查看所有元素
lrange
2.3.2.2 查看指定下标位元素
lindex
2.3.2.3 查询列表元素个数
llen
2.3.2.4 查询列表是否存在
exists
2.3.3.删除
2.3.3.1 从左删除
lpop,删除下标位为0的元素,也是最后进入的元素。
2.3.3.2 从右删除
rpop,删除下标位最末端的元素,也是第一个插入列表的元素。
2.3.3.3 删除指定元素
lrem
2.3.4 截取
2.3.4.1 截取下标范围的元素
ltrim
2.3.5 移动
2.3.5.1 移除列表最后一个元素到新列表中(组合命令)
rpoplpush
2.4 哈希(hash)
哈希是一个map集合,可以把它的key看成一个集合,而集合里是kv键值对的数据,类似 key- < key-value >,常用于对象存储。
2.4.1 赋值
2.4.1.1 单个哈希
hset
- redis客户端展示效果
2.4.1.2 多个哈希
hmset
2.4.1.3 不存在才赋值
hsetnx
2.4.1.4 自增
hincrby,哈希没有自减命令,用自增负数实现自减。
2.4.2 取值
2.4.2.1 单个哈希
hget
2.4.2.2 多个哈希
hmget
2.4.2.3 获取集合内所有键值对
hgetall
2.4.2.4 获取所有key
hkeys
2.4.2.5 获取所有value
hvals
2.4.2.6 获取集合内的key数量
hlen
2.4.2.7 判断集合内的key是否存在
hexists
2.4.3 删除
2.4.3.1 删除指定key
hdel
- 删除一个key
- 删除多个key
2.5 有序集合(zset)
应用场景:抖音排行榜
2.5.1 赋值
zadd
- redis客户端显示效果
2.5.2 取值
2.5.2.1 正序查询指定下标范围元素
zrange,可以把显示的结果看成一个从上往下排序的列表,正向排序就是从上往下数。
2.5.2.2 倒叙查询指定下标范围元素
zrevrange
2.5.2.3 查询集合内的元素个数
zcard
2.5.2.4 查询区间元素数量
zcount
2.5.3 排序
2.5.3.1 正序
zrangebyscore
- 负无穷到正无穷,-inf,+inf
- 排序结果带上分数
- 只取结果小于特定值的元素(3000)
- 排序结果只取0到1条
2.5.3.2 倒序
三、三种特殊数据类型
3.1 geospatial地理位置
3.1.1 赋值
3.1.1.1 添加
geoadd
作用:将给定的空间元素(纬度、经度、地名)添加到指定的键里面。
语法: geoadd key longitude latitude member…
- geoadd 命令以标准的x,y格式接受参数,使用时必须先输入经度,然后再输入纬度。
- geoadd 能够记录的坐标是有限的,非常接近地球两极区域的经纬度无法被索引。
- 有效的经度介于 -180 ~ 180 度之间,有效的纬度介于 -85.05112878 ~ 85.05112878 度之间。当输入超出范围的经度或者纬度时,geoadd将返回一个错误。
- 这些数据会以有序集的形式被储存在键里面,从而使得 georadius 和georadiusbymember 这样的命令可以在之后通过位置查询取得这些元素。
应用场景:附近位置、微信摇一摇、滴滴打车等这类依赖于地理位置信息的功能。
3.1.2 取值
3.1.2.1 key内元素
zrange
用法:geo 的数据类型为 zset,可以用zrange取key内元素。
3.1.2.2 经纬度
geopos
作用:从Key里取给定位置元素的经度、维度。
语法:geopos key member [member1 member2 ]
3.1.2.3 两个位置的距离
geodist
作用:取两个给定位置之间的距离。如果两个位置之中,有一个不存在,则命令返回空值。
语法:geodist key member1 member2 [unit]
指定单位的参数 unit 必须是以下单位的其中一个:
- m :表示单位为米
- km :表示单位为千米
- mi :表示单位为英里
- ft :表示单位为英尺
- 如果没有指定单位,geodist默认使用米作为单位。
- geodist在计算距离时,会假设地球为完美的球形,在极限情况下,这一假设最大会造成0.5%的误差。
3.1.2.4 半径内的元素
georadius
作用:取以给定的经纬度为中心,给定半径内的元素。
语法:georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc] [desc] [count count]
3.1.2.4.1 返回元素名称
3.1.2.4.2 返回元素名称+中心距离
withdist (参数)
3.1.2.4.3 返回元素名称+经纬度
withcoord(参数)
3.1.2.4.4 限制返回元素个数
count (参数)
3.1.2.4.5 降序排序
desc(参数)
3.1.2.4.6 升序排序
asc(参数)
3.1.2.5 指定范围内的元素
georaidusbymember
作用:取出指定范围内的元素,中心点是由给定的位置元素决定。
语法:georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc] [desc] [count count]
3.1.2.6 经纬度字符串
geohash
作用:将二维经纬度转换为一维字符串,字符串越长表示位置更精确,两个字符串越相似表示距离越近。
语法:geohash key member [member1] [member2]
3.1.3 删除
3.1.3.1 指定元素
zrem
用法:GEO 没有提供删除成员的命令,但是因为 GEO 的底层实现是 zset,所以可以借用 zrem 命令实现对地理位置信息的删除。
3.2 HyperLogLog基数
3.2.1 基数作用
作用:用于集合,指集合中不重复的元素个数,可以接受误差。
示例:
A{1,3,5,7,9,8,7} ,基数为6。
B{1,3,5,7},基数为4。
3.2.2 概述
背景:redis在2.8.9版本添加了hyperloglog结构,用来做基数统计的算法。
优点:在输入元素的数量或体积非常大时,计算基数所需的空间总是固定的,并且是很小的。每个HyperLogLog键只占用12KB的内存,就可以计算接近2^64个不同元素的基数。
用途:HyperLogLog是一种算法,提供了不精确的去重计数方案。 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
应用场景:
- 统计网页的浏览用户数量,一天内同一个用户多次访问只算一次。传统方案是使用set来保存用户id,然后统计set中的元素数量。
- 传统方案只能承载少量用户,一旦用户数量大起来就需要消耗大量的空间。
- 传统方案更偏重于保存用户,而非统计用户数量,使用传统方案可以达到目的,但吃力不讨好,而使用HyperLogLog最多需要12K就可以统计大量的用户数。
- 尽管HyperLogLog大概有0.81%的错误率,但对于统计用户数量这种不需要很精确的数据是可以忽略不计的。
3.2.3 赋值
3.2.3.1 添加元素
pfadd
语法:pfadd key element [element…]
3.2.4 取值
3.2.4.1 获取基值
pfcount
语法:pfcount key [key1 key2 …]
3.2.5 合并
3.2.5.1 并集合并
pfmerge
语法:pfmerge destkey sourcekey [sourcekey1 sourcekey2…]
3.3 Bitmap位图
背景:Redis 从 2.2 版本增加了 Bitmap(位图)。
应用场景:
- 可以统计用户一年的某些信息,如账户活跃或不活跃,登录或不登录,打卡或没打卡。如果使用普通的 key / value存储,则要记录 365 条记录,如果用户量很大,需要的空间也会很大。而Redis 提供了 Bitmap 位图这种数据结构,Bitmap 就是通过操作二进制位来进行记录,即为 0 和 1。
- 如果要记录 365 天的打卡情况,使用 Bitmap 表示的形式大概如下:0101000111000111……,这样 365 天相当于 365 bit,又 1 字节 = 8 bit , 所以相当于使用 46 个字节即可。
- BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。
3.3.1 赋值
3.3.1.1 单项赋值
setbit
语法:setbit key offset value 。设置key的第offset位为value(0或1)
3.3.2 取值
3.3.2.1 单项取值
getbit
语法:getbit key offset
- 获取 offset 设置的值,未设置过默认返回 0。
3.3.2.2 统计
bitcount
语法:bitcount key [start,end] 统计key上位的值为1的个数。
发布评论