首页 > 编程知识 正文

redis的hash数据结构,redis中key的数据结构

时间:2023-05-03 17:55:42 阅读:31310 作者:726

Redis数据结构和过期机制Redis数据结构五种常见数据类型字符串String集合set顺序集合sorted set列表Hash哈希三种不常见数据类型位图类型geo地理位置类型stream数据流类型Redis常见过期机制缓存过期和处置策略Redis性能影响因素Redis设置maxmemoryexpire

Redis数据结构

redis是用c语言开发的高性能的存储型键值对NoSql数据库

五个常见数据类型字符串String可以表示字符串、整数和浮点数

一般操作

setkeyvaluegetkeygetsetkeyvaluesetnxkeyvalueappendkeyvalue通过在末尾添加strlenkeyincrkeyincrbykeyincrement来添加指定整数decr

10.decrby key increment集合set无序的唯一元素,个数2^32-1

s addkey m1 m2 sremsmembersspopsrandmemberscardsismembersintersdiff

10.sunion适用于不能重复且不需要顺序结果的数据结构,如spop随机抽选

有序集合有序集合,元素本身无序且不重复

zadd

zrem

z卡

z计数

zincrby

零核心

佐兰克

zrevrank

z范围

zrevrange

可用于各种排名

列表list是一个双向链表,最多由2^32-1个元素组成,表示保存的有序、可重复的元素,可以用作堆栈或队列

lpush/rpush key v1 v2lpop/在rpop keylpushx key v1列表开头插入值rpushxblpop key timeout空时brpopllenlindexkeyindexlrangelremkeycountvaluelsetkeyindexvallueltrimrppot 2brpoplpushlinsert Hash散列是一种字符串类型的字段和值映射表,提供字段到字段值的映射

hsethmsethsetnxhexistshgethmgethgetallhdelhincrby

10.hlen 3的三种不常见的数据类型位图类型位图执行位操作,用一个位表示与某个元素对应的值或状态。 其中,key是对应的元素本身。 bitmap本身大大节约了存储容量

setbit key offset value设定key在offset的bit值getbit key offset取得key在offset的bit值bitcount key取得key的bit位1的个数bitpos key value, or/xor/not destkey key [key…]一个APP应用程序场景,首先对多个key进行逻辑运算,并存储在destkey中,该密钥返回设置为bit值索引值bittop的值:

6 .每月用户签名,用户id作为key,日期作为偏移量1签名

7 .统计活动用户。 日期为key,用户id在偏移1处表示活动

8 .查询用户状态。 日期为key,用户id为偏移量1,表示在线

geo地理位置类型redis用于处理位置信息,原理是z次曲线。 将x、y轴上的十进制变换为二进制数,使用对应于x轴和y轴的二进制数依次交叉得到6位的编码。 按从小到大的顺序连接数字的曲线称为z次曲线。 z次曲线是将多维转换为一维的方式。 然后,它利用名为Base32的数据编码机制,主要用于将二进制数据编码为可见字符串

geoadd key经度纬度成员名称1经度1纬度1成员名称2geohash key成员名称1成员名称2标准hash字符串geopos key成员名称1成员名称2geodist key成员1成员2georadiusByMember key成员值单

stream数据流stream是redis5.0或更高版本中添加的数据结构,用于可持续消息队列,序列化生成:消息ID,遍历消息,块和非块读取消息,以及消息包

xadd密钥id * field1value1xreadxrangexrevrangexdelxgroupcreate/destroykeyxgroupdelconsumerkeygroupnamecnamecnameconsumercountstreamskeyredis中的常规命令keys pattern满足指定的pattern

expire key ttl 指定key的过期时间rename oldkey newkeytype key Redis过期机制 缓存过期和淘汰策略 redis性能影响因素

长期使用,key会不断增加,redis作为缓存使用,物理内存也会满
内存与硬盘交换,虚拟内存,频繁IO性能急剧下降

redis设置maxmemory 不设置场景:Redis的key是固定的,不会增加,作为DB使用,保证数据完整性,不能淘汰,可以做集群,便于横向扩展。缓存淘汰策略:禁止驱逐maxmemory-policy noeviction设置场景:redis作为缓存使用,不断增加key,一般设置为物理内存的3/4在redis.conf中maxmemory 1024mb,如果设置了maxmemory,那么久需要设置 maxmemory-policy expire原理

expires中存储的是key和过期时间

typedef struct redisDb { dict *dict; -- key Value dict *expires; -- key ttl dict *blocking_keys; dict *ready_keys; dict *watched_keys; int id; } redisDb; 删除策略 定时删除:少用,需要建立定时器,让定时器在国企时间来执行对key删除惰性删除:在使用时候,如果发现已经过期就删除主动删除:配置删除策略,比如maxmemory-policy allkeys-lru
LRU: 最近最少使用有两种:
volatile-lru
从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
allkeys-lru
从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
LFU:一段时间内最少使用: volatile-lfu
allkeys-lfu
random:随机volatile-random
从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-random
从数据集(server.db[i].dict)中任意选择数据淘汰
ttl
volatile-ttl:TTL 数据淘汰机制:从过期时间的表中随机挑选几个键值对,取出其中 ttl 最小的键值对淘汰。
noenviction
禁止驱逐数据,不删除 默认
4.缓存淘汰策略的选择:
allkeys-lru:在不确定时候一般采用的策略,冷热数据交换
volatile-lru:比allkeys-lru性能差
allkeys-random:希望平均
自己控制:volatile-ttl

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。