侧边栏壁纸
博主昵称
流苏小筑

步伐虽小,密而不止

Redis数据类型

2022年12月01日 14阅读 0评论 0点赞

数据类型

公用命令

#获取所有的键
keys *

#删除键值对
del key

#获取键是否存在
exists key

#获取键的有效时长
ttl key

#获取键的数据结构类型
type key

#随机返回一个key
randomkey 

字符串(String)

字符串类型是Redis最基础的数据结构,其它的几种数据结构都是在字符串类型基础上构建的,字符串的值可以是:字符串、数字、二进制,但其值最大不能超过512M。

常用命令:

#设置指定key的值
set key value

#获取指定key的值
get key

#返回key中字符串的子字符串
setrange key start end

#将给定的key设为value,并且还回旧值
getset key value

#同时设置一个或多个key,value
mset key1 value1 key2 value2 key3 value3

#获取所有给定的key值
mget key1 key2 key3

#只有给定key不存在是,设定key的值
setex key value

#设置过期时间
set key 30s value
setex key 30s value

#返回指定key的值的长度
strlen key

#1将key的值数值增加一
incr key 
#1将key的值增加指定数值
incrby key 10

#将key的值减一
decr key
decrby key 10

#1如果key值已经存在,并且是字符串,在字符串的后面追加值
append key value

应用场景:

点赞收藏、缓存、计数器、对象存储缓存(共享session)、限速

列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),也可以获取指定范围指定下标的元素等。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

list底层是一个双向链表,两端操作行程很高,如果通过索引下标操作中间节点性能会下降。

两个特点:

  1. 列表中的元素是有序的,可以通过索引下标获取某个元素或某个某个范围内的元素列表
  2. 列表中的元素可以是重复的
  3. 双向链表

应用场景

公众号消息订阅、消息队列、栈、文章列表等

常用命令

#---------------添加操作-------------------#

#从左边/右边向列表中PUSH值(一个或者多个)
lpush/rpush key value

#向已存在的列名中push值(一个或者多个),list不存在 lpushx失败
lpushx/rpushx key value

#在指定列表元素的前/后 插入value(在v1前面/后面插入v2)
linsert key berfor/after v1 v2

#---------------查找操作-------------------#

#通过索引获取列表元素
lindex key index

#获取列表起止元素 (索引从左往右 递增)
lrange key start end

#获取列表长度
llen key

#---------------修改操作-------------------#

#通过索引为元素设值
lset key index value

#---------------删除操作-------------------#

#在列表左边/右边弹出一个元素
lpop/rpop key

#删除N个值等于v的元素
lrem key N     v1

#通过下标截取指定范围内的列表
ltrim key start end

#移除列表的最后一个元素,并将该元素添加到另一个列表并返回
rpoplpush 源列表 目的列表

#---------------阻塞操作-------------------#

#移除并获取列表的第一个元素/最后一个元素,如果列表为空,则会阻塞列表,直到等待超时,或者发现可弹出元素
blpop/brpop key[key2] 

#和rpoplpush功能相同,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素
brpoplpush 源列表 目的列表 timeout

集合(Set)

Redis的Set是string类型的无序集合,数据是不重复的,我们不能通过索引获取元素。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

特点:

单key多value,无序,不重复(key[value1, value2, value3])

应用场景:

标签、QQ内推荐可能认识的人、微信抽奖小程序

常用命令:

#---------------集合内操作-------------------#

#向集合中无序增加一个/多个成员
sadd key member1 member2 member3

#移除集合中一个/多个成员
srem key member1 member2 member3

#返回集合中所有的成员
smembers key

#获取集合的成员数
scard key

#查询member元素是否是集合的成员,若存在返回1,不存在返回0
sismember key member

#随机返回集合中count个成员,count缺省值为1
srandmember key [count]

#随机移除并返回集合中count个成员,count缺省值为1
spop key [count]

#---------------集合间操作-------------------#

#返回所有集合的交集
sinter key1 key2

#在SINTER的基础上,存储结果到集合中。覆盖
sinterstore key key1 key2

#返回所有集合的并集
sunion key1 key2

#在SUNION的基础上,存储结果到集合中。覆盖
sunionstore key key1 key2

#返回所有集合的差集 key1- key2,谁在前面以谁为主
sdiff key1 key2

#在SDIFF的基础上,将结果保存到集合中。覆盖
sdiffstore key key1 key2

#将key1集合的成员member移动到key2集合
smove key1 key2 member 

#在大量数据环境下,使用此命令遍历集合中元素,每次遍历部分
sscan key [MATCH pattern] [COUNT count]

有序集合(Zset)

在有序集合中保留了不能重复的特性,但是可以排序的,每一个元素都会关联一个double类型的分数(score)作为排序依据,score相同时按字典顺序排序。redis正是通过分数来为集合中的成员进行从小到大的排序。

特点:

有序,不重复(key 【 score1 v1 score2 v2 score3 v3】)

应用场景: 排行榜系统,成绩单,工资表

常用命令:

#---------------集合内操作-------------------#

#向有序集合添加一个或多个成员,或者更新已存在成员的分数
zadd key sorce1 v1 sorce2 v2 sorce3 v3

#获取有序集合的成员数
zcard key

#返回有序集中,成员的分数值
zscore key v

#计算在有序集合中指定区间score的成员数
zcount key min max

# 在有序集合中计算指定字典区间内成员数量
zlexcount key min max

#有序集合中对指定成员的分数加上增量 n
zincrby key n v

#迭代有序集合中的元素(包括元素成员和元素分值)
zscan key cursor [MATCH pattern] [COUNT count]:

#---------------范围查询-------------------#

#返回有序集合中指定成员的索引
zrank key v

#返回有序集合中指定成员的索引,从大到小排序
zrevrank key v

#通过索引区间返回有序集合成指定区间内的成员
zrange key start end

#获取分数和元素
zrange key start stop withscores

#通过索引区间返回有序集合成指定区间内的成员,分数从高到底
zrevrange key start end

#返回有序集中指定分数区间内的成员 -inf 和 +inf分别表示最小最大值,只支持开区间
zrangebyscore key min max

# 返回有序集中指定分数区间内的成员,分数从高到低排序
zrevrangebysocre key min max

#---------------删除操作-------------------#

#移除有序集合中一个/多个成员
zrem key v1 v2 v3

#移除有序集合中给定的排名区间的所有成员
zremrangebyrank key start stop

#移除有序集合中给定的分数区间的所有成员
zremrangebyscore key min max

#---------------集合间操作-------------------#

#计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中,numkeys:表示参与运算的集合数,将score相加作为结果的score
zinterstore key 2 key1 key2 
#计算给定的一个或多个有序集的并集并将结果集存储在新的有序集合 key 中
zunionstore key 2 key1 key2

哈希(Hash)

是一个string类型的key和value的映射表value={{key1,value1},{key2,value2}…},可以将一个Hash表作为一个对象进行存储(Map<string, Map<Object,Object>>),表中存放对象的信息。

特点:

key=>value模式不变,但是value是一个键值对(key[key1 => value1])

应用场景:

用户信息缓存

常用命令:

#---------------设置操作-------------------#

#将哈希表 key 中的字段 field 的值设为 value。重复设置同一个field会覆盖,返回0
hset key field value

#同时将多个 field-value (域-值)对设置到哈希表 key 中。
hmset key field1 value1 field2 value2

#只有在字段 field不存在时,设置哈希表字段的值。
hsetnx key field value

#为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 一样只适用于整数型字段
hincr key field n

#为哈希表 key 中的指定字段的浮点数值加上增量 n
hincrbyfloat key field n

#迭代哈希表中的键值对
hscan key cursor [MATCH pattern] [COUNT count]

#---------------查找操作-------------------#

#获取存储在哈希表中指定字段的值
hget key field

#获取所有给定字段的值
hmget key field1 field2 field3

#查看哈希表 key 中,指定的字段是否存在
hexists key field

#获取哈希表中字段的数量
hlen key

#获取所有字段field
hkeys key

#获取哈希表中所有值value
hvals key

#获取在哈希表key 的所有字段和值
hgetall key

位图(bitmap)

位图本质是数组,它是基于String数据类型的按位的操作。由0和1组成的二进制位的bit数组,每个二进制位都对应一个偏移量(我们称之为一个索引)。Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 =4294967296)。

应用场景:

是否登录、钉钉打卡,签到

常用命令:

# 给指定key的值的offset设置value
setbit key offset value

# 获取指定key的offset的值
getbit key offset

#返回指定key中key[start end]范围内为1的数量
bitcount key start end

#对不同的二进制存储数据进行位运算(and,or,not,xor)
bitop operation destkey key

基数统计(HyperLogLog)

去重后的数据统计

常用命令:

#添加指定元素到key
pfadd key element

#返回给定hyperLogLog的gu基数估算值
pfcount key

#将多个统计合成为一个
pfmerge key key1 key2

地理空间(GEO)

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作。

常用命令:

#添加地理位置的坐标
GEOADD key 经度 纬度 位置名称

#获取地理位置的坐标
GEOPOS key 位置名称

#计算两个位置之间的距离
GEODIST key 位置名称1 位置名称2

#根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"

#根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合
GEOADD Sicily 13.583333 37.316667 "Agrigento"

#返回一个或多个位置对象的 geohash 值
GEOADD Sicily 13.583333 37.316667 "Agrigento"
0

—— 评论区 ——

昵称
邮箱
网址
取消
博主栏壁纸
博主头像 流苏小筑

步伐虽小,密而不止

133 文章数
27 标签数
16 评论量