首页 > 数据库 >用过Redis吗,它使用在哪些地方(使用场景)

用过Redis吗,它使用在哪些地方(使用场景)

时间:2022-09-26 22:59:01浏览次数:91  
标签:哪些地方 场景 队列 Redis 列表 k1 使用

1. 用过Redis吗,它使用在哪些地方(使用场景)?

Redis是一种内存型数据库,用作数据库,缓存和消息代理。数据结构简单,读写速度快(毫秒级),原子操作。
适用于: 数据高并发读写、海量数据读写、对扩展性要求高的数据 的场景。

解决应用服务器的CPU和内存压力;
减少IO的读操作,减轻IO的压力;
关系型数据库的扩展性不强,难以改变表结构。

常见应用场景:

  1. 缓存: 热点数据(读多写少),减轻数据库压力。

  2. 数据共享: 分布式会话session

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

  4. 限时业务: 秒杀 存储登录者用户信息 存储短信验证码

  5. 分布式锁: 单独的服务,原子性(单线程)
    参考 java分布式锁终极解决方案之 redisson

  6. 最新列表
    List结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。Redis查询不到key,再MySQL查询

  7. 队列(消息队列)
    消息队列是大型网站必用中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。如果对于数据一致性要求高的话还是用RocketMQ等专业系统。

    由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务;队列不仅可以把并发请求变成串行,并且还可以做队列或者栈使用。

  8. 计数器: 统计点击数等 int类型,incrby(incr)命令,利用原子性(单线程,可以避免并发问题),性能好100%毫秒级
    浏览量(电商)、点赞数、收藏数、播放量、签到打卡、

  9. 限流: int类型,incrby(incr)命令
    以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false

  10. 时间轴(Timeline): 与最新列表场景类似

  11. 位统计(大数据处理): String类型的bitcount(1.6.6的bitmap数据结构介绍)
    字符是以8位二进制存储的

set k1 a
setbit k1 6 1
setbit k1 7 0
get k1
/**
6 7 代表的a的二进制位的修改
a 对应的ASCII码是97,转换为二进制数据是01100001
b 对应的ASCII码是98,转换为二进制数据是01100010

因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。
*/

参考
使用Redis的bitmaps统计用户留存率、活跃用户
用户日活月活怎么统计 - Redis HyperLogLog 详解


其他场景参考:
redis安装及应用场景
Redis的8大应用场景
Redis 16 个常见使用场景


更多面试题

标签:哪些地方,场景,队列,Redis,列表,k1,使用
From: https://www.cnblogs.com/jadite/p/16732835.html

相关文章

  • 一小伙使用 python爬虫来算命?
    1.网站分析因版权原因,网站的地址大家可以私信我或者加我文章结尾的qq,完整的教程群里有,需要的自提,当然遇到问题也可以请教哦。2.获取内容我们今天呢,就先做一个通过星座来得......
  • 友元的使用
    最近在做Census变换的项目中,在原先的代码基础上添加了一个计算梯度的文件,文件中新建了一个Grad类,但是又不想重新开辟内存(感觉会节省空间)想直接使用SemiGlobalMatching中的......
  • 使用 Visual Studio 编译 Notepad2 源码
    NotePad2Notepad2是一款免费开源的文本编辑器,可以用来替换Windows的记事本.下面我们来看下如何通过源码编译生成Notepad2以便定制一些个性化需求.下载Notepad2......
  • drf2-apiView源码-基本使用-request类源码分析-序列化组件-基本使用-反序列化
    apiView基本使用apiview源码分析request类源码分析序列化组件介绍序列化组件基本使用(查询所有,查询单个)反序列化(新增,修改)ApiView基本使用drf是一个第三方的app,只能......
  • go使用JWT进行跨域认证最全教学
    JWT前言JWT是JSONWebToken的缩写。JWT本身没有定义任何技术实现,它只是定义了一种基于Token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程。JWT组成......
  • sdn实验(1)——mininet安装及可视化工具miniedit的使用
    一、实验目的安装mininet及使用miniedit二、实验要求安装虚拟机,逐步配置好环境,并初步使用miniedit完成可视化工具的编辑三、具体步骤1.安装Ubuntu虚拟机,......
  • 什么是Bootstrap?以及为什么要使用Bootstrap
    Bootstrap是一个用于快速开发Web应用程序和网站的前端框架。Bootstrap是基于html、css、javascript的。Bootstrap具有移动设备优先、浏览器支持良好、容易上手、响应......
  • .net6 使用 JWT
    安装Nuget包Microsoft.AspNetCore.Authentication.JwtBearerProgram.cs里添加JWT//添加jwt验证:builder.Services.AddAuthentication(JwtBearerDefaults.Authent......
  • jQuery中使用过哪些插入节点的方法?他们的区别是什么
    append(),appendTo(),prepend(),prependTo(),after(),insertAfter()before(),insertBefore() 大致可以分为内部追加和外部追加append()表式向每个元素内部追加内容。......
  • 使用js实现深拷贝原理
    //任何引用数据类型的值都需要挨个遍历,直到取到基本类型的值为止functiondeepClone(obj){    varcloneObj=Array.isArray(obj)?[]:{};    //判断......