首页 > 数据库 >redis缓存和业务应用了解

redis缓存和业务应用了解

时间:2024-05-03 21:13:32浏览次数:26  
标签:队列 缓存 过期 redis 列表 命令 应用 用来

转自:https://tech.meituan.com/2017/03/17/cache-about.html

1.介绍

  • 在主页中显示最新的项目列表:Redis使用的是常驻内存的缓存,速度非常快。LPUSH用来插入一个内容ID,作为关键字存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。如果用户需要的检索的数据量超越这个缓存容量,这时才需要把请求发送到数据库。查询前N个,可以使用lrange命令。
  • 删除和过滤:如果一篇文章被删除,可以使用LREM从缓存中彻底清除掉。
  • 排行榜及相关问题:排行榜(leader board)按照得分进行排序。ZADD命令可以直接实现这个功能,而ZREVRANGE命令可以用来按照得分来获取前100名的用户,ZRANK可以用来获取用户排名,非常直接而且操作容易。
  • 按照用户投票和时间排序:排行榜,得分会随着时间变化。LPUSH和LTRIM命令结合运用,把文章添加到一个列表中。一项后台任务用来获取列表,并重新计算列表的排序,ZADD命令用来按照新的顺序填充生成列表。列表可以实现非常快速的检索,即使是负载很重的站点。
    过期项目处理:使用Unix时间作为关键字,用来保持列表能够按时间排序。对current_time和time_to_live进行检索,完成查找过期项目的艰巨任务。另一项后台任务使用ZRANGE…WITHSCORES进行查询,删除过期的条目。
    计数:进行各种数据统计的用途是非常广泛的,比如想知道什么时候封锁一个IP地址。INCRBY命令让这些变得很容易,通过原子递增保持计数;GETSET用来重置计数器;过期属性用来确认一个关键字什么时候应该删除。
    特定时间内的特定项目:这是特定访问者的问题,可以通过给每次页面浏览使用SADD命令来解决。SADD不会将已经存在的成员添加到一个集合。
    Pub/Sub:在更新中保持用户对数据的映射是系统中的一个普遍任务。Redis的pub/sub功能使用了SUBSCRIBE、UNSUBSCRIBE和PUBLISH命令,让这个变得更加容易。
    队列:在当前的编程中队列随处可见。除了push和pop类型的命令之外,Redis还有阻塞队列的命令,能够让一个程序在执行时被另一个程序添加到队列。

 // 有些不太明白的,先贴了。

 

标签:队列,缓存,过期,redis,列表,命令,应用,用来
From: https://www.cnblogs.com/BlueBlueSea/p/18171613

相关文章

  • 缓存特征了解
    转自:https://tech.meituan.com/2017/03/17/cache-about.html1.介绍1.1命中率命中率=返回正确结果数/请求缓存次数,命中率问题是缓存中的一个非常重要的问题,它是衡量缓存有效性的重要指标。命中率越高,表明缓存的使用率越高。1.2最大元素缓存中可以存放的最大元素的数量,一旦缓......
  • 高并发缓存架构实战和优化
    参考资料:图灵课堂-https://vip.tulingxueyuan.cn 中小公司Redis缓存架构以及线上问题分析直接写入数据库,然后更新redis;正常低并发情况下,这种情况是暂时不会出现问题的,因为并发量并不高,不会出现各种各样的并发问题。大厂线上大规模商品缓存数据冷热分离实战使用缓存,主要是......
  • redisson分布式锁原理
    参考:图灵课堂 https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95https://blog.csdn.net/asd051377305/article/details/108384490分布式锁的引入当在单机单线程情况下,是不用考虑任何并发问题的,一切都是那么的美好,那么的顺其自然。在单机多线程情况下,就要考虑......
  • Python深入理解*和**含义和应用
    本文源代码:https://gitee.com/obullxl/PythonCS/tree/master/CS-CY2405Python中*和**很常见禅师在阅读Python代码过程中,经常看到一个函数或方法的入参是*args和**kwargs(如:deffunc(*args,**kwargs)等)形式,或者在调用函数或方法时,在入参的元组和列表前面增加1个*号(如:func(*(1,2,......
  • 【Netty】【XXL-JOB】时间轮的原理以及应用分析
    1 前言今天晚上看了一本70多页的讲解时间轮的PDF,从是什么为什么以及原理到源码中的应用分析,讲的真好。这节我就按我理解的思路捋一下,记录一下哈。2 时间轮概述2.1 时间轮是什么时间轮是一种高效利用线程资源进行批量化调度的一种调度模型。把大批量的调度任务全部绑......
  • raft算法和etcd代码解析-5.应用模块的启动
    Node接口Node是raft应用模块在节点上的抽象,也是应用模块和算法模块交互的入口应用模块持有Node作为算法模块的引用,通过调用Node接口的API与算法模块通信,通信方式是通过若干个Channel异步完成的。//Noderepresentsanodeinaraftcluster.typeNodeinterface{ //告知......
  • centos7修改redis密码
    检查Redis配置文件首先,我们需要确保Redis的配置文件中包含了设置密码的选项。打开Redis的配置文件/etc/redis.conf,查找以下行并确保取消注释(去掉行首的#):requirepassyour_password启动Redis服务使用以下命令启动Redis服务:systemctlstartredis如果Redis已经在运行,则可以跳......
  • 浏览器缓存
    浏览器缓存基本的原理就是:浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中按位置分类ServerworkerServiceWorker是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。使......
  • 单个应用失败代码存档
    python版本fromflaskimportFlask,render_template,request,jsonifyimportrequestsimportbase64importosfromPILimportImageimportioimportlogging#ConfigureFlaskapplicationapp=Flask(__name__,template_folder='../web')app.config......
  • c#胖东来小程序自动购物程序(接单,windows桌面程序、linux程序、网络应用等等)
    一、程序效果自动打开胖东来小程序,自动购物 二、实现先截屏,然后利用opencv库识别下一步按键所在位置,然后使用mouse_event控制鼠标,模拟人的动作第一步,截取屏幕staticBitmapCaptureScreen(){intscreenWidth=Screen.PrimaryScreen.Bounds.Width;intscreenHe......