转自:https://www.cnblogs.com/NiceCui/p/7794659.html

一:缓存——热数据

热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相比于memcached还提供了丰富的数据类型可以使用,另外,内存中的数据也提供了AOF和RDB等持久化机制可以选择,要冷、热的还是忽冷忽热的都可选。

结合具体应用需要注意一下:很多人用spring的AOP来构建redis缓存的自动生产和清除,过程可能如下:

  • Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有的话,select 数据库,然后将数据插入redis

  • update或者delete数据库钱,查询redis是否存在该数据,存在的话先删除redis中数据,然后再update或者delete数据库中的数据

上面这种操作,如果并发量很小的情况下基本没问题,但是高并发的情况请注意下面场景:

为了update先删掉了redis中的该数据,这时候另一个线程执行查询,发现redis中没有,瞬间执行了查询SQL,并且插入到redis中一条数据,回到刚才那个update语句,这个悲催的线程压根不知道刚才那个该死的select线程犯了一个弥天大错!于是这个redis中的错误数据就永远的存在了下去,直到下一个update或者delete。

二:计数器

诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能!爽。

命令:INCRBY

当然爽完了,别忘记持久化,毕竟是redis只是存了内存!


三:队列

  • 相当于消息系统,ActiveMQ,RocketMQ等工具类似,但是个人觉得简单用一下还行,如果对于数据一致性要求高的话还是用RocketMQ等专业系统。

  • 由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务

  • 队列不仅可以把并发请求变成串行,并且还可以做队列或者栈使用


四:位操作(大数据处理)

用于数据量上亿的场景下,例如几亿用户系统的签到,去重登录次数统计,某用户是否在线状态等等。

想想一下腾讯10亿用户,要几个毫秒内查询到某个用户是否在线,你能怎么做?千万别说给每个用户建立一个key,然后挨个记(你可以算一下需要的内存会很恐怖,而且这种类似的需求很多,腾讯光这个得多花多少钱。。)好吧。这里要用到位操作——使用setbit、getbit、bitcount命令。

原理是:

redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示我们上面例子里面的用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统,上面我说的几个场景也就能够实现。用到的命令是:setbit、getbit、bitcount


五:分布式锁与单线程机制

  • 验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交

  • 秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”

  • 全局增量ID生成,类似“秒杀”


六:最新列表

例如新闻列表页面最新的新闻列表,如果总数量很大的情况下,尽量不要使用select a from A limit 10这种low货,尝试redis的 LPUSH命令构建List,一个个顺序都塞进去就可以啦。不过万一内存清掉了咋办?也简单,查询不到存储key的话,用mysql查询并且初始化一个List到redis中就好了。


七:排行榜

谁得分高谁排名往上。命令:ZADD(有续集,sorted set)

最近在研究股票,发现量化交易是个非常好的办法,通过臆想出来规律,用程序对历史数据进行验证,来判断这个臆想出来的规律是否有效,这玩意真牛!有没有哪位玩这个的给我留个言,交流一下呗。

转载于:https://www.cnblogs.com/fengff/p/9004473.html

redis的7个应用场景相关推荐

  1. Redis介绍及常用应用场景介绍

    1. 基础与协议 Redis是一种常用来做缓存的工具,遵循BSD协议.BSD协议是五大开源协议的一种,它允许使用者在使用产品的基础上,可以对源代码进行修改和重新发布,并且可以发布为商业软件.需要注意的 ...

  2. Redis各特性的应用场景

    Redis的六种特性 l Strings l Hashs l Lists l Sets l Sorted Sets l Pub/Sub Redis各特性的应用场景 Strings Strings 数据 ...

  3. Redis 的 8 大应用场景

    转载自  Redis 的 8 大应用场景 之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis的应用场景,也是非常重要的,学不学得好,能正常落地是关键. 下面一一来分析下Re ...

  4. “百变”Redis带你见识不同场景下的产品技术架构

    2018飞天技术汇24期-云数据库Redis产品发布会,由阿里云数据库技术组技术专家王欢.怀听.梁盼分别带来以"Redis全球多活产品"."Redis混合存储产品&quo ...

  5. 【面试经典】redis 常见数据结构以及使用场景分析

    1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...

  6. Redis各个数据类型的使用场景

    Redis各个数据类型的使用场景 Redis支持五种数据类型: string(字符串) hash(哈希) list(列表) set(集合) zset(sorted set:有序集合). Redis列表 ...

  7. “百变”Redis带你见识不同场景下的产品技术架构 1

    摘要: 2018飞天技术汇24期-云数据库Redis产品发布会,由阿里云数据库技术组技术专家王欢.怀听.梁盼分别带来以"Redis全球多活产品"."Redis混合存储产品 ...

  8. Redis高级特性及应用场景

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

  9. Redis分布式锁及其应用场景

    RedLock分布式锁 基于 Redis 实现分布式锁的方式名叫 Redlock 安全特性:互斥访问,即永远只有一个 client 能拿到锁 避免死锁:最终 client 都可能拿到锁,不会出现死锁的 ...

  10. memcached和redis的区别和应用场景

    一:特性和对比 1.性能上: 性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比 Memcached性能更高.而在10 ...

最新文章

  1. 《预训练周刊》第16期:中科院推出全球首个图文音三模态预训练模型、顶会论文探索100层序列推荐模型的加速训练...
  2. 获取最大轮廓 opencv
  3. 一篇文章带你解析,乐观锁与悲观锁的优缺点
  4. 深入剖析阿里云推荐引擎——新架构,新体验
  5. 事故现场:MySQL 中一个双引号的错位引发的血案
  6. 【华为大咖分享】12.从Change、merge到New Challenge--华为内源平台到研发云平台的发展历程(后附PPT下载地址)
  7. flask-sqlalchemy CURD
  8. 多线程下单例模式的实现_ThreadLocal_ReentrantLock
  9. 计算机维护宝典,超齐全的维修宝典之电脑维修实例大全
  10. 2018年线程与多线程面试必知必会内容
  11. PM2怎么保持Node应用程序永久活动?
  12. 部署Symantec Antivirus 10.0网络防毒服务器之二
  13. 课程笔记--复习专用
  14. vue 插槽的版本变化1.x-2.6.0-3.x(详细)
  15. installshield mysql_InstallShield 调用批处理部署MySql数据库 | 学步园
  16. Python正则(粗略)
  17. pycharm远程连接服务器,同步代码,使用GPU
  18. 小猿圈之常见java面试题总结,你学会了吗?
  19. Redis基础进阶--Sentinel 机制与用法(二)
  20. CMD命令查看局域网内所有主机名及IP

热门文章

  1. HTTP Status 405 - JSPs only permit GET POST or HEAD问题的分析和解决办法
  2. 深究AngularJS——校验(非form表单)
  3. 犀牛导出su文件错误插件错误_安利|一款免费插件blender-for-unrealengine
  4. android信息中字符个数,在android中指定编辑文本中的字符数
  5. vc获取n卡编号_电脑入门知识:通过显卡型号中字母和数字判断显卡性能
  6. js怎么定义combobox_好程序员web前端教程分享新手应该怎么学习webpack
  7. python定义一个dog类 类属性有名字毛色体重_面向对象实践,练习,Python
  8. 【干货】这10个Liunx命令能提高50%的工作效率
  9. 【无标题】12.04 Serverless Meetup 深圳站 | Call 你来参加
  10. “敏捷版”全链路压测