首页 > 数据库 >Redis连环问

Redis连环问

时间:2022-08-25 00:12:00浏览次数:128  
标签:数据库 Redis 线程 内存 key 连环 节点

Redis连环问

Redis为什么这么快呢?

  • 基于内存:Redis是使用内存存储,没有磁盘IO上的开销。数据存在内存中,读写速度快。
  • 单线程实现( Redis 6.0以前):Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。
  • IO多路复用模型:Redis 采用 IO 多路复用技术。Redis 使用单线程来轮询描述符,将数据库的操作都转换成了事件,不在网络I/O上浪费过多的时间。
  • 高效的数据结构:Redis 每种数据类型底层都做了优化,目的就是为了追求更快的速度。

Redis为何选择单线程呢?

  • 单线程实现可以避免过多的上下文切换开销。程序始终运行在进程中单个线程内,没有多线程切换的场景。
  • 避免同步机制的开销:如果 Redis选择多线程模型,需要考虑数据同步的问题,则必然会引入某些同步机制,会导致在操作数据过程中带来更多的开销,增加程序复杂度的同时还会降低性能。
  • 实现简单,方便维护:如果 Redis使用多线程模式,那么所有的底层数据结构的设计都必须考虑线程安全问题,那么 Redis 的实现将会变得更加复杂。

Redis应用场景有哪些?

  • 缓存热点数据,缓解数据库的压力。
  • 利用 Redis 原子性的自增操作,可以实现计数器的功能,比如统计用户点赞数、用户访问数等。
  • 作为简单的消息队列,实现异步操作。
  • 限速器,可用于限制某个用户访问某个接口的频率,比如秒杀场景用于防止用户快速点击带来不必要的压力。
  • 好友关系,利用集合的一些命令,比如交集、并集、差集等,实现共同好友、共同爱好之类的功能。

Redis怎么实现消息队列?

  • 使用列表,让生产者将任务使用LPUSH命令放进列表,消费者不断用RPOP从列表取出任务。
  • 发布订阅模式。类似于MQ的主题模式。只能消费订阅之后发布的消息,一个消息可以被多个订阅者消费。
  • 延时队列。使用sortedset,拿时间戳作为score,消息内容作为key,调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。

Redis主从复制的原理?

  • Redis的复制功能是支持多个数据库之间的数据同步。主数据库可以进行读写操作,当主数据库的数据发生变化时会自动将数据同步到从数据库。从数据库一般是只读的,它会接收主数据库同步过来的数据。
    • 当启动一个从节点时,它会发送一个 PSYNC 命令给主节点;
    • 如果是从节点初次连接到主节点,那么会触发一次全量复制。此时主节点会启动一个后台线程,开始生成一份 RDB 快照文件;
    • 同时还会将从客户端 client 新收到的所有写命令缓存在内存中。RDB 文件生成完毕后, 主节点会将RDB文件发送给从节点,从节点会先将RDB文件写入本地磁盘,然后再从本地磁盘加载到内存中
    • 接着主节点会将内存中缓存的写命令发送到从节点,从节点同步这些数据;
    • 如果从节点跟主节点之间网络出现故障,连接断开了,会自动重连,连接之后主节点仅会将部分缺失的数据同步给从节点。

过期键的删除策略吗?

  • 被动删除。在访问key时,如果发现key已经过期,那么会将key删除。

  • 主动删除。定时清理key,每次清理会依次遍历所有DB,从db随机取出20个key,如果过期就删除,如果其中有5个key过期,那么就继续对这个db进行清理,否则开始清理下一个db。

  • 内存不够时清理。Redis有最大内存的限制,通过maxmemory参数可以设置最大内存,当使用的内存超过了设置的最大内存,就要进行内存释放, 在进行内存释放的时候,会按照配置的淘汰策略清理内存。

标签:数据库,Redis,线程,内存,key,连环,节点
From: https://www.cnblogs.com/faetbwac/p/16622765.html

相关文章

  • Redis(6)------通用命令
    Key相关命令在redis中无论什么数据类型,在数据库中都是以Key-value形式保存,通过进行对Redis-Key的操作来完成对数据库中数据的操作。常用命令keys*:查看当前数据库中的所......
  • Redis集群模式搭建
    Redis主要有三种集群方案:主从模式哨兵模式集群模式集群模式搭建Redis3.0版本之后才可用,推荐3主3从集群模式。1.启动6台Redis配置文件如下,redis_7002.conf...类......
  • 一键编译安装Redis脚本
    #!/bin/bash./etc/init.d/functionsVERSION=redis-5.0.7PASSWORD=123456INSTALL_DIR=/usr/lcoal/redisinstall(){yum-yinstallgccjemalloc-devel||{act......
  • redis cluster三主三从搭建
    rediscluster三主三从搭建需要用到三台机器,每台机器上启动8001和8002端口,也可以根据自己需求改成别的端口,在下面配置文件中会体现截止7.1步骤,1.1-7.1的步骤在三台机器上......
  • Redis_持久化
    Redis_持久化持久化:redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们才可以键redis内存中的数据持久化保存到硬盘的文件中redis持久化机构:......
  • redis命令操作set&sortedset、redis命令操作通用命令
    redis命令操作set&sortedset集合类型:set不允许重复元素存储:saddkeyvalue获取:smemberskey:获取set元素中所有元素删除:sremkeyvalue:删除set集合中某......
  • Redis下载安装、Redis数据结构
    Redis下载安装2.下载安装1,官网:https://redis.id2.中文网:http://www.redis.net.cn/3.解压直接可以使用∶*redis.windows.conf:配置文件*redis-cli.exe:redis的客......
  • 36. Redis---Java使用Redis
    1.前言在开始学习本节内容之前,首先需要您掌握Java编程语言,其次确定您已经安装了Redis服务及JavaRedis驱动,并且能够成功运行Java程序。本节介绍如何在Java中......
  • Redis概念
    Redis概念Redis概念:redis是一款高性能的NoSQL系类的关系数据库 图解: ......
  • 35. Redis---缓存问题
    1.前言在实际的业务场景中,Redis一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库MySQL配合使用。Redis会把MySQL中经常被查询的数据缓存起来,......