首页 > 数据库 >浅谈Redis(一)

浅谈Redis(一)

时间:2024-08-22 22:51:42浏览次数:14  
标签:缓存 浅谈 过期 Redis 内存 数据 socket

浅谈Redis(一)

文章目录

Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,比如string、hash、list、set及sorted set等。

Redis的特点

  1. 内存存储:Redis主要使用内存存储数据,使得其读写速度非常快,也支持数据持久化,通过RDB和AOF,以确保数据的安全性。
  2. 支持主从结构:Redis支持主从复制模式,可以利用从实例进行将数据备份,从而提高系统的可用性和可靠性。
  3. 丰富的数据类型:Redis提供了字符串、哈希、列表、集合等多种数据类型,可以满足各种应用场景的需求。
  4. 支持过期策略:Redis允许为数据设置过期时间,到期的数据会自动被删除。
  5. 高性能:由于其单线程模型和高效的内存使用策略,在处理大量并发读写操作时很出色。
  6. Redis的应用场景很广泛,包括缓存、消息队列、实时统计、会话管理、社交网络的实时互动等。

Redis线程模型

  1. Redis内部使用单线程的文件事件处理器,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器进行处理。文件事件处理器结构包括多个socket、IO多路复用程序、文件事件分派器和事件处理器。
  2. 多个socket可能会并发产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket并将socket产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件交给对应的事件处理器处理。

Redis单线程为什么快

  1. 纯内存操作,核心是基于非阻塞的IO多路复用机制。
  2. 单线程避免了多线程的频繁上下文切换问题,不用考虑多进程或多线程切换消耗的CPU,不需要考虑锁的问题。

Redis持久化方案

  1. Redis提供了RDB和AOF两种持久化方式,RDB是把内存中的数据以快照的形式写入磁盘,通过fork子进程执行,采用二进制压缩存储;而AOF是以文本日志的形式记录处理的每个写入或删除操作。
  2. RDB是把Redis的数据保存在单一的快照文件中,适合用来做容灾备份。如果在快照保存之前宕机,这段时间的数据会丢失,保存快照时可能导致服务短暂不可用。
  3. AOF对日志文件的是通过追加的方式写入,有灵活的同步策略,相同的数据集,AOF文件要比RDB大,运行效率比RDB低。

Redis缓存淘汰策略

无论是本地缓存还是分布式缓存,为了保证高性能,都采用内存保存数据,由于成本和内存限制,当存储的数据超过缓存容量时,需要对缓存的数据进行剔除。

  1. 一般缓存的剔除策略有淘汰最早数据FIFO、剔除最近最少使用LRU和剔除最近使用频率最低LFU。
  2. noeviction:当内存限制达到并且客户端尝试执行会让更多内存被使用的命令时返回错误。
  3. allkeys-lru:尝试回收最少使用的键,让新添加的数据有空间存放。
  4. volatile-lru:尝试回收在过期集合中最少使用的键。
  5. allkeys-random:回收随机的键。
  6. volatile-random:回收在过期集合中随机的键。
  7. volatile-ttl:回收过期集合中的键,并且优先回收存活时间较短的键。

Redis缓存穿透、击穿和雪崩区别和解决方案

  1. 缓存穿透是缓存和数据库中都没有的数据,而用户不断发起请求,比如发起id为-1的数据,用户可能是攻击者,攻击会导致数据库压力过大。我们可以在接口层增加校验,比如用户鉴权,id做基础校验等;缓存和数据库都取不到的数据,可以将键值对key-value写为key-null,缓存有效时间可以设置短一点;也可以使用布隆过滤器。
  2. 缓存击穿是指缓存中没有但数据库中有的数据,一般是缓存时间到期。我们可以为热点数据设置二级缓存并设置不同的失效时间;在第一个请求上加互斥锁;设置热点数据永不过期。
  3. 缓存雪崩是指缓存中数据大批量过期,而查询数据量巨大,引发数据库压力过大甚至宕机。我们可以为缓存数据设置随机的过期时间,防止同一时间大量数据过期现象发生;如果缓存数据库是分布式部署的,将热点数据均匀分布在不同缓存数据库中;设置热点数据永不过期。

标签:缓存,浅谈,过期,Redis,内存,数据,socket
From: https://blog.csdn.net/dolly_baby/article/details/141371060

相关文章

  • 浅谈Kafka(一)
    浅谈Kafka(一)文章目录浅谈Kafka(一)Kafa的设计是什么样的数据传输的事务定义消息队列的应用场景Kafka怎么样判断节点是否存活Kafka的消息是采用pull模式还是push模式Kafka在磁盘上的消息格式Kafka高效文件存储设计特点Kafka与传统消息系统之间的区别Kafka的分区数据怎样保......
  • 第四章 Python操作redis(操作案例)
    一、python对redis基本操作(1)连接redis#方式1importredisr=redis.Redis(host='127.0.0.1',port=6379)r.set('foo','Bar')print(r.get('foo'))#方式2importredispool=redis.ConnectionPool(host='127.0.0.1',po......
  • 第三章 redis数据类型
    redis数据类型redis可以理解成一个全局的大字典,key就是数据的唯一标识符。根据key对应的值不同,可以划分成5个基本数据类型。redis={"name":"yuan","scors":["100","89","78"],"info":{"name":"rain"......
  • 大厂面试官:你知道Redis如何实现分布式锁么?
    常见面试题,看完基本也没啥问题了Redis如何实现分布式锁分布式锁是用于分布式环境下并发控制的一种机制,用于控制某个资源在同一时刻只能被一个应用所使用。如下图所示:Redis本身可以被多个客户端共享访问,正好就是一个共享存储系统,可以用来保存分布式锁,而且Redis的读写......
  • 【redis数据库】基础入门,五种类型增删改查
    目录1.redis的启动2.redis基本操作3.redis的数据类型4.字符串操作添加修改值获取值5.键相关操作查找键判断键是否存在查看键对应的值类型设置已有键的过期时间查看键过期时间6.哈希操作添加值添加多个值获取字段获取字段对应的值获取多个字段的值获取所有字......
  • springboot中redis缓存的基本使用
    springboot中redis缓存的基本使用一、使用1、依赖引入<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-cache</artifactId></dependency><dependency>  <groupId>org.springframe......
  • redis入门
    1介绍1.1简介        Redis(RemoteDictionaryServer)是一个使用ANSIC编写的支持网络、基于内存、分布式、可选持久性的键值对存储数据库。根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。                      ......
  • 浅谈TCP和UDP协议的区别
    **传输模式**TCP协议:数据流(DataStream)--没有消息边界,比如服务端给客户端发来2048字节大小的数据,而客户端设置的一次最大接收大小为1024,这时候就意味着还有1024没能接收过来,要再接收一次。所以容易出现粘包的情况。所谓粘包,就是数据都粘在一起了。UDP协议:数据报(Da......
  • Redis 数据类型详解
    Redis是一个开源的内存数据结构存储系统,广泛应用于缓存、消息队列、实时数据分析等场景。Redis提供了多种数据类型,本文将详细介绍Redis的五种主要数据类型及其应用场景,并从概述、基本操作、应用场景和数据结构等方面进行深入探讨。1.字符串(String)概述字符串是Redis......
  • 浅谈面向对象三大特性(着重介绍虚函数实现的多态)
        写在前面:文章内容分享为主,如有不当之处,恳请批评指正。        今天在使用C++的工厂模式的时候,突然发下有些生疏,就想着发一篇博客,巩固一下,但突然想到工厂模式中设计的继承以及多态的特性,决定先发一篇有关于C++多态的文章,其他的就丢给明天吧!一、面向对象三......