redis 内存占用分析-redis使用标准内存分配器(5-5-21)

更新时间:2024-07-17 分类:Redis 浏览量:2

Redis本文目录一览:

  • 1、为什么redis需要把所有数据放到内存中
  • 2、Redis的IO多路复用——单线程的理解(Redis6.0之后的多线程)
  • 3、为什么说redis是基于内存

为什么redis需要把所有数据放到内存中

内存存储 Redis的所有数据都存储在内存中,这样可以避免磁盘I/O操作的延迟。内存访问速度要比磁盘快很多,因此Redis可以处理大量的并发请求。

持久化 是为了避免系统在发生灾难性的系统故障时导致的系统数据丢失。我们一般会将数据存放在本地磁盘,还会定期的将数据上传到云服务器。

但是 Redis 也不是什么都可以做,比如数据量特别大时,不适合 Redis,我们知道 Redis 是基于内存的,虽然内存很便宜,但是如果你每天的数据量特别大,比如几亿条的用户行为日志数据,用 Redis 来存储的话,成本相当的高。

Redis就是基于内存可持久化的key-value数据库。性能问题,Hashmap存储大量数知据时需要不断扩容,Redis支持2的32次方个key,每个key或者value大小最大512M。

used_memory_rss 为 Redis 进程占据操作系统的内存,所以除了分配器分配的内存之外,还包括进程运行本身需要的内存、内存碎片等,但是 不包括虚拟内存 。

Redis的IO多路复用——单线程的理解(Redis6.0之后的多线程)

IO多路复用技术架构图如下 注:多线程处理可能涉及锁,并且涉及切换线程的消耗。耗时的命令会导致性能下降,而且无法发挥CPU多核的性能。Redis多线程只用来处理网络数据的读写和协议解析,命令的执行仍旧是单线程。

Redis在I/O事件处理上,采用了I/O多路复用技术,同时监听多个套接字, 并为套接字关联不同的事件处理函数,通过一个线程实现了多客户端并发处理。

此外,Redis 0之后引入了线程IO,采用多线程来处理网络数据的读写和协议解析,但命令执行仍然是单线程顺序执行。这样的方式既能保持Redis命令执行的原子性,又能提高IO处理的效率。

Redis的高并发和快速原因redis是基于内存的,内存的读写速度非常快;redis是单线程的,省去了很多上下文切换线程的时间;redis使用多路复用技术,可以处理并发的连接。

Redis 单线程是指 Redis的网络IO和键值对读写 是由一个线程完成。这也是Redis提供存储服务的主流程。对于一个多线程系统,在合理的资源分配情况下,提高线程数,可以有效的提高系统的吞吐量。

为什么说redis是基于内存

1、Redis的高并发和快速原因redis是基于内存的,内存的读写速度非常快;redis是单线程的,省去了很多上下文切换线程的时间;redis使用多路复用技术,可以处理并发的连接。

2、Redis就是基于内存可持久化的key-value数据库。性能问题,Hashmap存储大量数知据时需要不断扩容,Redis支持2的32次方个key,每个key或者value大小最大512M。Hashmap是线程不安道全的,redis因为操作原子性不需要考虑这个。

3、数据存储方式不同:Redis是基于内存的数据库,而关系型数据库通常是基于磁盘的。

4、因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。

5、Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库、缓存服务或消息服务使用。Redis支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs等。

6、快速读写:内存是计算机系统中最快的存储器之一,数据在内存中的读写速度比磁盘或网络块的速度快得多。