Redis之基本数据结构

Antonia ·
更新时间:2024-11-13
· 716 次阅读

文章目录Redis可以做什么Redis5种基本数据对象String字符串redis是动态字符串,最大512M,小于1M时加倍现有空间,大于1M时加倍1M的空间批量对多个字符串读写,节省网络耗时设置key的过期时间-涉及到过期策略计数功能list列表-相当于LinkedList队列-右边进左边出栈-右边进右边出ltrim截取hash字典-相当于hashmapset集合-相当于hashSetzset有序集合-相当于sortedSet容器型数据结构通用规则
如果不能深入地了解系统,技术和框架背后的深层原理,很多问题无法理解到本质,更谈不上解决,临时抱佛脚也于事无补。 Redis可以做什么 记录帖子的点赞数,评论数,点击数 记录用户帖子id列表,便于快速显示用户的帖子列表 记录帖子的标题,摘要,作者和封面信息,用于列表页显示 记录帖子的点赞用户id列表,评论id列表,用于显示和去重计数 缓存近期热帖内容,减少数据库压力 如果帖子ID是自增的,使用redis分配帖子ID 帖子和收藏集的关系 记录总热榜,分类热榜帖子ID列表 缓存用户行为历史,进行恶意行为过滤 Redis5种基本数据对象

他们是:字符串+列表+集合+哈希+有序集合

String字符串

比如缓存用户信息,需要使用JSON序列化成字符串存入缓存。取用户信息时又会经过一次反序列化的过程。

redis是动态字符串,最大512M,小于1M时加倍现有空间,大于1M时加倍1M的空间 set key userinfo; get key; 批量对多个字符串读写,节省网络耗时 mset key1 value1 key2 value2 mget key1 key2 设置key的过期时间-涉及到过期策略 ## 设置5秒过期时间 set key1 value1 expire key1 5 ## 合并set+expire setex key2 5 value2 ## 如果存在key3就不执行 setnx key3 value3 计数功能

超过sigined long的最大值最小值,会报错

## 自增key1的值 set key1 50; incr key1; ## 合并指令 incrby key1 50; list列表-相当于LinkedList

插入删除块,查找慢
作用:常用作异步队列使用。将需要延后处理的任务序列化成字符串放入redis,另一个线程从列表轮询进行执行。

队列-右边进左边出 rpush key1 value1 value2 value3 lpop key1 "value1" lpop key1 "value2" llen key1 1 栈-右边进右边出 rpush key1 value1 value2 value3 rpop key1 "value3" lpop key1 "value2" ltrim截取 ##截取这个区间的值(0表示第一个数 -1表示最后一个数) ltrim start_index end_index

快速例表:ziplistziplistziplistziplistziplist

hash字典-相当于hashmap

redis字典只能是字符串,与hashmap的重哈希方式不一样,redis为了提高性能,采用了渐进式的rehash策略
渐进式的rehash会保留新旧两个hash结构,然后在后续定时任务以及hash指令中,逐渐将旧内容迁移到新hash结构。
hash结构也可以存储用户信息,不同于String串一次性序列化整个对象,hash字典只序列化某些字段实现部分获取。

hset object key1 value1; hset object key2 value2; hgetall object; hlen object; hget object key1; hincry object key1 1; //字典中单个key也可单独自增 set集合-相当于hashSet

用来存储中奖用户的id,因为有去重的功能,保证一个用户不会中将两次

sadd key1 value1; sadd key1 value2; spop key1; smembers key1 //查询键为key1的所有值 "value1" sismember key1 value1; //查询某value是否存在 scard key1 //查询键为key1值得个数 zset有序集合-相当于sortedSet

它是一个set保证value得唯一性,而且它可以给每个value赋一个排序权重
存储一对多得数据,并且对多的一方按照权重进行排序

存储粉丝列表,value值是用户ID,score是关注时间。这样可以对粉丝列表按关注时间进行排序。 存储班级学生成绩,value值是学生ID,score是他的考试成绩。对成绩按分数进行排序 zadd banji stu1 56; zadd banji stu2 69; zadd banji stu3 80; zrem banji 80; //删除value zrange banji 0 -1; //按score进行排序 zrevrange banji 0 -1; //按score逆序排序 zrangebyscore banji 60 90; //根据分值区间 zcard banji; //相当于count 容器型数据结构通用规则

list/set/hash/zset

create if not exists drop if no elements

注意:若某字符串设置了过期时间,若使用set修改它,那么它的过期时间会消失。


作者:Bruce Leeqee



数据 基本数据结构 数据结构 Redis

需要 登录 后方可回复, 如果你还没有账号请 注册新账号