首页 > 数据库 >Redis为什么快?

Redis为什么快?

时间:2023-04-19 22:31:54浏览次数:29  
标签:为什么 存储 缓存 Redis 写入 内存 数据

redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。和Memcached类似。redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。

它的速度快主要归功于以下几个方面:

  1. 内存数据库:Redis使用内存作为存储介质,这意味着它可以在服务器内存中快速读写数据,而无需频繁地将数据从磁盘读取到内存或将内存数据写入磁盘。这使得Redis在处理大量数据时非常高效。
  2. 快速的写入速度:Redis的写入速度非常快,这得益于它使用的是一种称为“发布订阅”的事务模型。在这种模型下,客户端向Redis发布自己的写入操作,Redis会立即响应并将操作写入磁盘。这种模型可以确保数据被立即写入磁盘,从而提高写入速度。
  3. 内存映射文件:Redis还支持将数据映射到文件中,这使得它可以在服务器内存中存储大量数据。当需要读取这些数据时,Redis可以直接从内存中读取,而无需将数据从文件中读取到内存中。这也进一步提高了Redis的读写速度。
  4. 多种数据结构:Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。这使得Redis可以存储各种类型的数据,并且可以根据需要选择不同的数据结构进行存储。
  5. 并发性:Redis支持多种并发模型,如FIFO、LRU、SPOOL和AOF等。这使得Redis可以轻松处理高并发请求,并且在处理请求时具有较高的效率。

Redis的高速度主要归功于它使用内存作为存储介质、快速的写入速度、内存映射文件、多种数据结构、并发性和高效的事务模型等特性。

和其他数据库的区别

Redis和其他数据库有很多不同点,其中一些重要的区别如下:

  1. 存储方式:Redis是一种内存数据库,它使用字节(byte)作为存储单位。这意味着它可以在内存中快速存储和读取数据,而无需频繁地将数据从磁盘读取到内存或将内存数据写入磁盘。
  2. 数据类型:Redis支持多种数据类型,如字符串、哈希、列表、集合和有序集合等。这使得Redis可以存储各种类型的数据。
  3. 写入速度:Redis的写入速度非常快,这得益于它使用的是一种称为“发布订阅”的事务模型。在这种模型下,客户端向Redis发布自己的写入操作,Redis会立即响应并将操作写入磁盘。这种模型可以确保数据被立即写入磁盘,从而提高写入速度。
  4. 内存映射文件:Redis还支持将数据映射到文件中,这使得它可以在服务器内存中存储大量数据。当需要读取这些数据时,Redis可以直接从内存中读取,而无需将数据从文件中读取到内存中。这也进一步提高了Redis的读写速度。
  5. 并发性:Redis支持多种并发模型,如FIFO、LRU、SPOOL和AOF等。这使得Redis可以轻松处理高并发请求,并且在处理请求时具有较高的效率。
  6. 自动内存管理:Redis使用Redis专用的垃圾回收器自动管理内存。当内存不足时,垃圾回收器会自动回收不再使用的内存块,从而释放内存。这使得Redis在内存不足时也能保持较高的性能。

应用领域

Redis 的应用范围非常广泛,以下是一些主要的应用场景:

  1. 缓存:Redis的缓存功能非常强大,可以用于缓存网站的静态资源、缓存数据库查询结果、缓存用户登录信息等。
  2. 分布式锁:Redis可以用于实现分布式锁,以保证多个客户端在并发操作时能够同时获取锁。
  3. 会话存储:Redis可以用于存储用户的会话信息,包括登录信息、用户ID和流水号等,以实现在线用户管理。
  4. 队列:Redis可以用于创建队列,用于实现电子邮件队列、任务队列等。
  5. 集合数据结构:Redis可以用于存储集合数据结构,如字符串集合、哈希集合等。
  6. 实时聊天系统:Redis可以用于创建实时聊天系统,用于在社交网络上触发好友请求的通知等。
  7. 业务数据存储:Redis可以用于存储业务数据,如用户订单、销售数据等。

Redis缺点

Redis的缺点主要有缓存穿透,缓存击穿,缓存雪崩,双写不一致。例如缓存穿透,解决方案可以加锁,如果是单机部署,则可以使用JVM级别的锁,如lock、synchronized。Redis的性能并不受CPU的运行速度,影响redis性能的主要原因是网络带宽和内存大小。




标签:为什么,存储,缓存,Redis,写入,内存,数据
From: https://blog.51cto.com/u_14540126/6207529

相关文章

  • Pycharm这个更新索引是个什么操作,为什么每次启动,都会进行?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【吴超建】问了一个Pycharm操作的问题,这里拿出来给大家分享下。每次打开Pycharm的时候,都会有个更新的操作,遇到项目比较多的时候,挨个去索引更新,确实挺费时的。下图是他自己的部分项目,看上去还是挺多的:二、实现过程这里【6G】提......
  • 有大佬知道这是为什么嘛?路径和文件名都没错呀
    大家好,我是皮皮。一、前言前几天在Python白银交流群【笑】问了一个Python文件处理的问题,这里拿出来给大家分享下。二、实现过程这里【空翼】指出是路径错了的问题,其实报错也非常明显了。只需要把前面那个topmine_src去掉即可。顺利地解决了粉丝的问题。三、总结大家好,我是皮皮。这......
  • go项目中数据库连接,以及redis连接
     文件:common/mysql.go数据库连接文件packagecommonimport("gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/schema""log")varDB*gorm.DB//全局定义DBvardbErrerror//定义数据库错误funcinit(){dsn:=......
  • 【Redis】面试题 GEO地理位置信息
    目录面试1http协议详情,http协议版本,http一些请求头2GET请求和POST请求的区别3如何实现服务器给客户端发送消息,websocket是什么?4悲观锁和乐观锁,如何实现今日内容1GEO地理位置信息面试1http协议详情,http协议版本,http一些请求头 -特点: 1基于请求响应--》服务端不能主......
  • redis----day03( )
    面试面试如何聊#第一面(笔试): -办公室做题:拍照,发群里---》自己课搜,同学帮着搜----》往上写-问不答了,可以直接面试吗?#第二面:正式面试(开启手机录音,放口袋中) -一个人,多个人坐你对面-最重要的:自我介绍(自己提前写出来,500字,尽可能展现自己的优势) -面试官您......
  • centos9 redis安装报错(实在无解使用方法)
    报错如下[root@centosbin]#./redis-server./redis-server:errorwhileloadingsharedlibraries:libssl.so.1.1:cannotopensharedobjectfile:Nosuchfileordirectory使用的解决命令yummakecacheyum-yinstall*openssl*原过程root@centosbin]#lsredi......
  • 900万大数据量 查询 更新 使用redis 多线程请求
    表A中有900多万数据,根据900万数据,查询数据并插入B表创建一个定时任务,定时查询配置条件,查询更新(查询更新使用多线程)预估时间,设置请求时间跟频率不想这么干:可以查看数据执行进度思路:设置一个运行队列runList里面是待执行的id设置一个失败队列failList里面是执行失败的i......
  • Redis Pipeline(管道)
    RedisPipeline简介Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。一次Redis客户端发起的请求,经过服务端的响应后,大致会经历如下的步骤:客户端发起一个(查询/插入)请求,并监听socket返回,通常情况都是阻塞模式等待Redis服务器的响应服务端处理命令,并且返回处理结果......
  • redis高级-day3——GEO地理位置信息
    目录1GEO地理位置信息1GEO地理位置信息#GEO(地理信息定位):存储经纬度,计算两地距离,范围等 -根据经纬度---》确定具体地址的---》高德开放api---》返回具体地址#redis可以存储经纬度,存储后可以做运算, 比如:两个经纬度之间距离(直线距离)比如:统计某个经纬度......
  • Redis高可用搭建方案
    本次使用redis版本为redis-5.0.14,下载地址http://redis.io/download1、linux环境安装gccyuminstallgcc2、上传redis-5.0.14.tar.gz到usr/local文件夹下,解压tar-zxfredis-5.0.14.tar.gz3、进入redis-5.0.14目录,执行make命令编译、安装4、在/usr/local下创建对应目录......