作者:梁桂钊

本文,是升级版,补充部分实战案例。梳理几个场景下利用 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 使用场景(转)相关推荐

  1. 服务端指南 数据存储篇 | 选择合适的数据存储方案

    在服务端会经常遇到数据存储的选型问题,是选择使用关系型数据库 MySQL,还是选择内存数据库 Redis,还是选择文档数据库 MongoDB,还是选择列族数据库 HBase, 还是选择全文搜索引擎 E ...

  2. 服务端指南 数据存储篇 | MySQL(03) 如何设计索引

    改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. 原文地址:服务端指南 数据存储篇 ...

  3. 服务端mysql数据存储设计_服务端开发指南与最佳实战 | 数据存储技术 | MySQL(03) 如何设计索引...

    改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. 基本索引类型 MySQL 索引可以 ...

  4. 网络游戏《丛林战争》开发与学习之(二):粘包分包现象以及服务端解析数据

    本篇博客主要介绍数据发送和接收时遇到的粘包和分包现象,以及实现服务端解析收到消息的代码,本节的代码是在第(一)部分的基础上进行的,可以先浏览下第一部分https://blog.csdn.net/s13 ...

  5. java Socket Tcp示例三则(服务端处理数据、上传文件)

    示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader; import java.io.IOException; im ...

  6. 服务端指南 | 良好的 API 设计指南

    设计一套良好的 API 接口. 原文地址:服务端指南 | 良好的 API 设计指南 博客地址:blog.720ui.com/ 版本号 在 RESTful API 中,API 接口应该尽量兼容之前的版本 ...

  7. Gzip 服务端压缩数据

    2019独角兽企业重金招聘Python工程师标准>>> Gzip 服务端压缩数据,提高传输速率. 首先写一个过滤器 public class GzipValidator implem ...

  8. ajax 获取java数据_如何使用Ajax从服务端获取数据

    在本文中将给出一个例子来介绍使用 Ajax 技术从服务端获得数据的三种方法.这个例子很简单,就是两个选择框(html中的标签),通过选中第一个select的某一项后,会从服务端得到一些数据,并加载到第 ...

  9. 移动端向服务端提交数据——实现简单登录

    移动端通过网络连接与服务端进行数据交互,在App开发中占有很大比重,可以说服务端是移动端的"后勤部队",服务端可以向移动端源源不断的更新"新鲜的血液",使得移动 ...

最新文章

  1. mysql隔离级别底层实现_1、深入理解mysql四种隔离级别及底层实现原理(MVCC和锁)...
  2. Android调用binder实现权限提升-android学习之旅(81)
  3. 初探EntityFramework——空EF设计器模型
  4. mvc5 @html,如何在MVC 5中使用 HTML5 Viewer
  5. 【VM】—VM安装包
  6. Batch入门教程(2)
  7. 在线日食计算机,《全日食》
  8. Atitit  验证 数字验证 非空验证的最佳算法  h5
  9. python并发编程 协程_Python并发编程协程之Gevent
  10. mac 安装 JDK
  11. Rusr Error: linker `x86_64-w64-mingw32-gcc` not found
  12. 计算机系统字体推荐,10大最合适编程的字体推荐
  13. php 模拟登陆微云,微云 - HHTjim'S 部落格
  14. iPhone手机轻松获取UDID的六种方式
  15. 结合Java和机器学习技术,如何驾驭大数据提升业务效率和竞争力?
  16. TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(2))
  17. 1.3 一摞烙饼的排序
  18. 噪声dba是什么单位_声音的大小dB,到底是什么单位?
  19. 蚂蚁金服蒋国飞:区块链商用时代正在加速到来
  20. 利用C++写一个三国人物英雄按年龄排序的案例

热门文章

  1. ROS的学习(十四)用C++写一个简单的接收者
  2. 学好C++开发技术能从事哪些岗位?
  3. 区块链支付平台技术的应用
  4. 已开源|码上用它开始Flutter混合开发——FlutterBoost
  5. Swift 类与结构体
  6. ​七周二次课(5月7日)监控io性能、free命令、ps命令、查看网络状态、linux下抓包...
  7. Django---部署
  8. Linux关机重启指令
  9. POJ 3421 X-factor Chains
  10. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务