redis核心数据结构以及他的应用场景
文章目录
- redis核心数据结构
- 1.string字符串
- 1.1应用场景
- 2.hash哈希
- 2.1应用场景
- 2.2优缺点
- 3.list数组列表
- 3.1应用场景
- 4.set集合
- 4.1应用场景
- 5.zset有序集合
- 参考文章
- java Jedis API
redis核心数据结构
1.string字符串
1.1应用场景
单值缓存
- key,value键值对,一个key对应一个value
- SETt kv存值 GET k取值
对象缓存 - 第一种也是kv结构只是v是一个json串,和单值缓存一样的使用方法
- 第二种是批量读取写入,例如 MSET user:1:name zhangsan user:1:age 18 MGET user:1:name user:1:age
分布式锁 - SETNX命令是指我写入一个key那么其他线程就不可以再次写入这个key,就可以保证只有一个线程能执行。
- SETNX user:1 1执行该命令如果返回1就代表获取锁成功,如果返回0则代表获取锁失败
- DEL user:1删除该key也就是释放锁
- 防止程序错误导致死锁可以设置key的超时时间SET user:1 1 ex 10 nx其中nx参数表示是setnx命令、ex 10超时时间为10秒
计数器
INCR String这条命令执行会让计数器+1从0开始计数,可以做访问量
session共享
spring session + redis可以实现session共享
2.hash哈希
2.1应用场景
对象缓存
这种方式更像是java中的Map<String,Map<String,String>>
HMSET user 1:name zhangsan 1:age 18
HMGET user 1:name 1:age
购物车
以用户id为key 商品id为field 商品数量为value
- 添加商品 HSET key field value
- 增加商品数量 HINCRBY key field value
- 商品总数 hlen key
- 删除商品 hdel key field
- 获取购物车中的全部商品 hgetall key
2.2优缺点
优点
- 相比string节省内存和cpu资源节省存储空间
- 同类的数据归类整合存储方便管理逻辑性更强
缺点 - 过期功能只能做用在key上,粒度比较大
- 集群环境下不适合大规模使用,分片存储负载均衡不均衡
3.list数组列表
3.1应用场景
轻松实现栈、队列、阻塞队列
api支持从左或从右拿元素还可以启动监听
新浪微博消息流
LPUSH 消息列表id 消息内容//添加
LPUSH 消息列表id 消息内容2
LRANGE 消息列表id 0 4 //查询从左查询分页的0-4条数据
4.set集合
4.1应用场景
抽奖程序
SADD 抽奖活动id 用户id1//添加
SADD 抽奖活动id 用户id2
SADD 抽奖活动id 用户id3
SMEMBERS 抽奖活动id //查看用户集合
SRNDMEBER 抽奖活动id 抽奖个数 //直接随机抽取固定个数的用户
SPOP 抽奖活动id 抽奖个数 //抽出固定个数的用户并将用户从集合中删除
点赞、收藏
SADD 文章id 用户id//点赞或收藏
SREM 文章id 用户id//取消
SISMEMBER 文章id 用户id// 检查是否已经点赞或收藏
SMEMBERS 文章id//获取点赞或收藏列表
SCARD 文章id//获取点赞用户总数
新浪微博关注模型
- 共同关注的人
SINTER 集合key1 集合key2 集合key3 //交集,三个集合中相同的数据集合 - 分析这个群体可能喜欢的人
SUNION 集合key1 集合key2 集合key3 //并集,三个集合合并去重 - 我可能认识的人
SDIFF 集合key1 集合key2 集合key3 //差集运算第一个集合之中后边没有的 - 我关注的人也关注了它
SISMEMBER 文章id 用户id// 检查是否已经关注
5.zset有序集合
新浪微博热搜
ZINCRBY 热搜集合key 1 文章id //点击新闻计数+1
ZREVRANGE 热搜集合key 0 9//排行版前十
ZREVRANGE 热搜集合key 0 9 WITHSCORES//排行版前十和阅读量
ZUNIONSTORE 集合key 个数 集合名称//并集计算并存储,新集合可以筛选相同的热搜存储指定的热搜集合并将阅读量进行相加
ZINTERSTORE 集合key 个数 集合名称//交集计算并存储,新集合可以合并存储指定的热搜集合并将阅读量进行相加
参考文章
- 参考博客 https://blog.csdn.net/qq_35655945/article/details/82698315
- 参考博客 https://www.cnblogs.com/haoprogrammer/p/11065461.html
- 菜鸟教程 https://www.runoob.com/w3cnote/redis-use-scene.html
- java Jedis API https://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html
- 学习视频 https://www.bilibili.com/video/BV1AT4y1L7J7?p=7&spm_id_from=pageDriver
java Jedis API
https://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html
redis核心数据结构以及他的应用场景相关推荐
- Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁
List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...
- Redis核心数据结构ZSET、GeoHash 、 Stream--排行榜、消息Pull推送、附近搜索、布隆过滤器 、IM聊天室
ZSET.Geo . Stream redis zset数据结构 常用命令 排行榜 步骤一.初始化1个月的历史数据 步骤二:定时刷新数据 步骤3:排行榜查询接口 GeoHash 命令 附近酒店搜索实现 ...
- 01-Redis核心数据结构和高性能原理
Redis核心数据结构和高性能原理 Redis安装 核心数据结构以及用法 String结构 字符串常用操作 原子加减 应用场景 Hash结构 Hash常用操作 Hash应用场景 Hash结构优缺点 L ...
- Redis的数据结构及应用场景
2019独角兽企业重金招聘Python工程师标准>>> 一. 谈谈对redis的理解,它的应用场景. Redis是一个key-value存储系统,它支持存储的value类型包括str ...
- Redis进阶-核心数据结构进阶实战
文章目录 入门 Redis 基本数据结构 Redis API 通用API strings\ hash\list\set\zset Strings Hash List Set Zset 应用场景 Str ...
- Redis中数据结构和编码详细图解(应用场景及优缺点)
专业术语 sds:simple dynamic string 简单动态字符串,redis自己开发的一个字符串的抽象类型 embstr:embedded sds string embstr编码的SDS, ...
- 【面试经典】redis 常见数据结构以及使用场景分析
1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...
- php两个数组之间去重,php数组去重、魔术方法、redis常用数据结构及应用场景
一.用函数对数组进行去重的方法 1. arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留 每个值第一次 出现的健名,健名保留不变. 第二个参数可以选择排序方式: ...
- 【高级开发进阶】Redis五大数据结构应用场景落地
Redis缓存数据结构,数据同步问题(双删策略),缓存雪崩,缓存穿透,热点缓存重构,缓存失效,哨兵机制,持久化,redis 淘汰机制 熟悉掌握Redis数据结构的使用场景,熟悉Redis缓存高并发的使 ...
最新文章
- 网站推广期间出现排名异常网站推广专员应如何应对?
- 写给MongoDB开发者的50条建议Tip6
- 看了这一篇,就不用看别的——Java中Object关于锁的的三个方法:wait,notify,notifyAll的作用
- python 如何重定向输出
- cassandra随机获取数据,Cassandra适合写入和少读,HBASE随机读取写入
- 从离散值中把值相近的放在一起
- 庚顿数据:实时数据库赋能工业互联网
- php function函数用法,js的function函数是什么?js中function的用法
- php mysql 非空_PHP-为什么mysql接受非空字段为null
- fseek linux 大文件_上传大文件
- laravel 原生 sql
- Mac 修改hosts
- 基于三星 bada 手机操作系统 的打泡泡游戏
- android 组件暴露风险,Activity组件暴露导致本地拒绝服务
- nginx日志模块ngx_http_log_module源码分析
- 图像算法工程师面试考点集锦
- java反序列化成object_java 反序列化输出 object获取为空的问题
- 医药之家:仿制药市场加速洗牌,多家药企陆续通过一致性评价
- mysql 高级查询总结_MySQL高级查询总结
- (一)LAMP (CGI,fastcgi, PHP,基于php的LAMP架构,php连接数据库)