redis的String、List、Hash、SET、ZSet五中数据类型常用的一些场景总结
目
目录
1、String类型常见的使用场景
1.1 一般的业务功能模块,比如购物车
1.2 简单的字符缓存
1.3 储存结构体或者对象
1.4 计数功能
1.5 各类场景下(单机或分布式)的标识号
1.6 集群环境下的Session共享
1.7 redis实现分布式锁
2 hash使用场景
3 list使用场景
3.1 微信公众号列表
4 set使用场景
4.1 微信抽奖活动
4.2 微信点赞设计
4.3 两个人共同兴趣爱好,微博共同关注人等
5 zset使用场景
5.1 常用于排行榜,视频点赞排行,关注排行
1、String类型常见的使用场景
1.1 一般的业务功能模块,比如购物车
设计key值的时候,尽量简洁、明了,比如xxx:cart:001表示某个用户的购物车信息
1.2 简单的字符缓存
项目中有些地方无法保存字符,可以存储到redis中,但是注意是否要设计加上过期时间和做好key的设计,否则redis莫名其妙的key会越来越多,难以维护
1.3 储存结构体或者对象
- 首先把对象转换成json字符串
- 然后set user:01 value
- 或者直接存储mset user:1:name a user:1:age 18
1.4 计数功能
点赞数或者文章浏览数等,可以方便通过incr来增加,decr来减少点赞或浏览次数(
NCR article:001 GET article:001
1.5 各类场景下(单机或分布式)的标识号
比如我们常用的mysql是使用主键自增的,我们可以借助redis来帮我们生成唯一的主键,但是如果一次添加的数据比较多,会对redis有较大压力,可以一次从redis获取多个主键编号,然后使用incrby一次性增加具体的数目:incrby serialNo 1000
1.6 集群环境下的Session共享
使用spring session与redis完成session共享
1.7 redis实现分布式锁
redis使用String+lua实现分布式锁
2 hash使用场景
2.1 hash存储数据的两种结构
第一种:hmset user:1 name tom age 12
第二种:hmset user 1:name tom 2:age 12
功能
1.全选功能-获取所有该用户的所有购物车商品
2.商品数量-购物车图标上要显示购物车里商品的总数
3.删除-要能移除购物车里某个商品
4.增加或减少某个商品的数量
userid: 001 如何设计实现?
hmset cart:001 prod:01 1 prod:02 1
指令说明:
当前登录用户ID号做为KEY,商品ID号为Field, 加入购物车数量为value
我看到一篇写的比较全面的,还有代码,可以参考:使用redis的hash 实现简单的购物车功能
3 list使用场景
3.1 微信公众号列表
公众号1发布了一个消息:
lpush msg:01 1(消息id)
公众号2发布了一个消息:
lpush msg:01 2(消息id)
我的公众号消息列表:
lrange mes:01 0 5
4 set使用场景
4.1 微信抽奖活动
- 把抽奖的数据放入set集合 :sadd act:001 004
- 开始抽奖2名中奖者,随机选择2个:srandmember act:001 2 或 spop act:001 2
- 查看有多少用户参加了本次抽奖 :smembers act:001
4.2 微信点赞设计
- 面试题目:朋友圈消息ID:008,微信点赞如何设计? 张三用户ID 为userId:01
- 张三对消息ID008点赞啦 sadd zan:008 userId:01
- 张三取消了对消息008的点赞 srem zan:008 userId:01
- 检查用户是否点过赞 sismember zan:008 userId:01
- 获取消息ID008所有的点赞用户列表 smembers zan:008
- 消息ID008的点赞数计算 scard zan:008
4.3 两个人共同兴趣爱好,微博共同关注人等
初始关注条件
- a关注的人 sadd aCare 成龙 李连杰 周星驰 c
- b关注的人 sadd bCare 周星驰 周润发 张国荣 c
- c关注的人 sadd cCare 周星驰 李连杰 王祖贤
1)a和b共同关注的人 sinter aCare bCare , 计算结果为 {周星驰 ,c} 计算
2) 我关注的人也关注他(c老师) sismember aCare c ;sismember cCare 周星驰 ;计算
3)我可能认识的人 SDIFF aCare bCare -> {周润发,张国荣}
5 zset使用场景
5.1 常用于排行榜,视频点赞排行,关注排行
今日头条人们换题榜
1)点击话题 zincrby topic:20191022 1 ;当前话题查看新增1
2) 展示今日前9排名的新闻 zrevrange topic:20191022 0 20 withscores
3)统计近3日点击数据,并存放的新的集合 zunionstore topic:3day 3 topic:20191022 topic:20191021 topic:20191020
4) 展示近3日的排行前9名 zrevrange topic:20191022-20191020 0 9 withscores
redis的String、List、Hash、SET、ZSet五中数据类型常用的一些场景总结相关推荐
- string类型比较_redis存json数据时选择string还是hash
我们在缓存json数据到redis时经常会面临是选择string类型还是选择hash类型去存储.接下来我从占用空间和IO两方面来分析这两种类型的优势. 1.占用空间 根据数据结构的共识我们知道hash ...
- 分布式内存数据库---Redis操作String、list、set、hash和Zset
Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类 ...
- Redis五大基本数据类型(String、LIst、Set、Hash、ZSet)及其底层结构
文章目录 零.Redis中Key相关操作 一.字符串(String) 二.列表(List) 三.集合(Set) 四.哈希(Hash) 五.有序集合(Zset) 零.Redis中Key相关操作 keys ...
- 带你掌握Redis数据类型:string和Hash
摘要:Redis中有五大数据类型,分别是String.List.Set.Hash和Zset. 本文分享自华为云社区<Redis的string类型常用命令解析>,作者:灰小猿 . 先问大家一 ...
- redis类型[string 、list 、 set 、sorted set 、hash]
Keys redis本质上一个key-value db,所以我们首先来看看他的key. 首先key也是字符串类型,但是key中不能包括边界字符:由于key不是binary safe的字符串,所以像&q ...
- (Redis_学习一)Redis关于string类型和hash类型数据操作
Redis关于string类型和hash类型数据操作 set name xiaohongyang // get name setnx name xiaohy get name setex name 1 ...
- 宝塔面板Redis数据管理工具hash和zset类型报错的解决方法
问题描述 在宝塔面板的Redis数据管理工具中,查询其他数据都没问题,但是查询hash和zset类型的数据时页面上会出现一个黑框,并且右侧没有出现数据. (写文章的时候 ...
- 【Redis之ZSet类型的详解ZSet类型中常用命令的实践】
Redis之ZSet类型的详解&ZSet类型中常用命令的实践 知识回顾: 通过对Redis中的String的命令做了充分的讲解以及实践学习 通过对Redis中String类型之Bit命令的详解 ...
- Redis之String应用场景与SpringCache--存储对象信息、分布式唯一ID、文章阅读量、Lua脚本
String应用场景 一.存储对象信息 代码 重写Redis序列 解决方式 剖析SpringCache常用注解 @CacheConfig @Cacheable @CachePut @CacheEvic ...
最新文章
- Android系统中标准Intent的使用
- 【Kick Algorithm】十大排序算法及其Python实现
- IOS开发-通知与消息机制
- 被 Kafka 虐的日子,太惨了……
- Java核心API -- 2(String、StringBuilder、StringBuffer)
- Git使用教程:真正手把手教你使用git!
- SpringSecurity Filter
- android 电池小记
- app中的h5游戏分享到微信等第三方
- Hadoop的shell命令
- 猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器
- IEEE会议论文模板下载
- WPF|一个比较简单带点设计的登录界面
- 中国网游未来发展方向预测
- php 5.0入门系列教程 pdf,ThinkPHP5.0-快速入门手册(新手教程版).pdf
- http请求状态码有哪些?分别代表什么意思?
- kbhit(), bioskey(), system(pause)
- 24年前他被余承东招入华为,现在掌舵第四大事业群,对垒阿里张建锋、百度王海峰,腾讯汤道生
- java快递驿站管理系统免费_基于jsp的快递物流管理系统-JavaEE实现快递物流管理系统 - java项目源码...
- 单证与双证高级证书与普通证书的区别与联系