服务端指南 数据存储篇 | 聊聊 Redis 使用场景(转)
作者:梁桂钊
本文,是升级版,补充部分实战案例。梳理几个场景下利用 Redis 的特性可以大大提高效率。
随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求。因此,Redis 基于内存存储数据,可以极大的提高查询性能,对产品在架构上很好的补充。在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。
缓存
对于热点数据,缓存以后可能读取数十万次,因此,对于热点数据,缓存的价值非常大。例如,分类栏目更新频率不高,但是绝大多数的页面都需要访问这个数据,因此读取频率相当高,可以考虑基于 Redis 实现缓存。
会话缓存
此外,还可以考虑使用 Redis 进行会话缓存。例如,将 web session 存放在 Redis 中。
时效性
例如验证码只有60秒有效期,超过时间无法使用,或者基于 Oauth2 的 Token 只能在 5 分钟内使用一次,超过时间也无法使用。
访问频率
出于减轻服务器的压力或防止恶意的洪水攻击的考虑,需要控制访问频率,例如限制 IP 在一段时间的最大访问量。
计数器
数据统计的需求非常普遍,通过原子递增保持计数。例如,应用数、资源数、点赞数、收藏数、分享数等。
社交列表
社交属性相关的列表信息,例如,用户点赞列表、用户分享列表、用户收藏列表、用户关注列表、用户粉丝列表等,使用 Hash 类型数据结构是个不错的选择。
记录用户判定信息
记录用户判定信息的需求也非常普遍,可以知道一个用户是否进行了某个操作。例如,用户是否点赞、用户是否收藏、用户是否分享等。
交集、并集和差集
在某些场景中,例如社交场景,通过交集、并集和差集运算,可以非常方便地实现共同好友,共同关注,共同偏好等社交关系。
热门列表与排行榜
按照得分进行排序,例如,展示最热、点击率最高、活跃度最高等条件的排名列表。
最新动态
按照时间顺序排列的最新动态,也是一个很好的应用,可以使用 Sorted Set 类型的分数权重存储 Unix 时间戳进行排序。
消息队列
Redis 能作为一个很好的消息队列来使用,依赖 List 类型利用 LPUSH 命令将数据添加到链表头部,通过 BRPOP 命令将元素从链表尾部取出。同时,市面上成熟的消息队列产品有很多,例如 RabbitMQ。因此,更加建议使用 RabbitMQ 作为消息中间件。
End.
转载请注明来自36大数据(36dsj.com)
转载于:https://www.cnblogs.com/kenshinobiy/p/6909119.html
服务端指南 数据存储篇 | 聊聊 Redis 使用场景(转)相关推荐
- 服务端指南 数据存储篇 | 选择合适的数据存储方案
在服务端会经常遇到数据存储的选型问题,是选择使用关系型数据库 MySQL,还是选择内存数据库 Redis,还是选择文档数据库 MongoDB,还是选择列族数据库 HBase, 还是选择全文搜索引擎 E ...
- 服务端指南 数据存储篇 | MySQL(03) 如何设计索引
改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. 原文地址:服务端指南 数据存储篇 ...
- 服务端mysql数据存储设计_服务端开发指南与最佳实战 | 数据存储技术 | MySQL(03) 如何设计索引...
改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. 基本索引类型 MySQL 索引可以 ...
- 网络游戏《丛林战争》开发与学习之(二):粘包分包现象以及服务端解析数据
本篇博客主要介绍数据发送和接收时遇到的粘包和分包现象,以及实现服务端解析收到消息的代码,本节的代码是在第(一)部分的基础上进行的,可以先浏览下第一部分https://blog.csdn.net/s13 ...
- java Socket Tcp示例三则(服务端处理数据、上传文件)
示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader; import java.io.IOException; im ...
- 服务端指南 | 良好的 API 设计指南
设计一套良好的 API 接口. 原文地址:服务端指南 | 良好的 API 设计指南 博客地址:blog.720ui.com/ 版本号 在 RESTful API 中,API 接口应该尽量兼容之前的版本 ...
- Gzip 服务端压缩数据
2019独角兽企业重金招聘Python工程师标准>>> Gzip 服务端压缩数据,提高传输速率. 首先写一个过滤器 public class GzipValidator implem ...
- ajax 获取java数据_如何使用Ajax从服务端获取数据
在本文中将给出一个例子来介绍使用 Ajax 技术从服务端获得数据的三种方法.这个例子很简单,就是两个选择框(html中的标签),通过选中第一个select的某一项后,会从服务端得到一些数据,并加载到第 ...
- 移动端向服务端提交数据——实现简单登录
移动端通过网络连接与服务端进行数据交互,在App开发中占有很大比重,可以说服务端是移动端的"后勤部队",服务端可以向移动端源源不断的更新"新鲜的血液",使得移动 ...
最新文章
- mysql隔离级别底层实现_1、深入理解mysql四种隔离级别及底层实现原理(MVCC和锁)...
- Android调用binder实现权限提升-android学习之旅(81)
- 初探EntityFramework——空EF设计器模型
- mvc5 @html,如何在MVC 5中使用 HTML5 Viewer
- 【VM】—VM安装包
- Batch入门教程(2)
- 在线日食计算机,《全日食》
- Atitit 验证 数字验证 非空验证的最佳算法 h5
- python并发编程 协程_Python并发编程协程之Gevent
- mac 安装 JDK
- Rusr Error: linker `x86_64-w64-mingw32-gcc` not found
- 计算机系统字体推荐,10大最合适编程的字体推荐
- php 模拟登陆微云,微云 - HHTjim'S 部落格
- iPhone手机轻松获取UDID的六种方式
- 结合Java和机器学习技术,如何驾驭大数据提升业务效率和竞争力?
- TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(2))
- 1.3 一摞烙饼的排序
- 噪声dba是什么单位_声音的大小dB,到底是什么单位?
- 蚂蚁金服蒋国飞:区块链商用时代正在加速到来
- 利用C++写一个三国人物英雄按年龄排序的案例
热门文章
- ROS的学习(十四)用C++写一个简单的接收者
- 学好C++开发技术能从事哪些岗位?
- 区块链支付平台技术的应用
- 已开源|码上用它开始Flutter混合开发——FlutterBoost
- Swift 类与结构体
- ​七周二次课(5月7日)监控io性能、free命令、ps命令、查看网络状态、linux下抓包...
- Django---部署
- Linux关机重启指令
- POJ 3421 X-factor Chains
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务