Redis准备面试 第一天

什么是Redis?

        使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的数据库,Redis 可以存储键和五种不同类型的值之间的映射;键的类型只能为字符串,值支持五种数据类型:String,List,Set,Zset,Hash

数据类型含义
字符串(String)最基本的数据类型,可以存储字符串、整数或浮点数。常用于缓存、计数器和简单的键值存储
列表(List)有序的字符串集合,可以在列表的两端进行插入和删除操作。常用于消息队列、最新消息的存储和排行榜等场景
有序集合(Zset)有序的字符串集合,每个成员都关联一个分数,可以根据分数排序。常用于排行榜、优先级队列等场景
集合(Set)无序的字符串集合,不允许重复元素。可以进行交集、并集、差集等操作,例如每个用户只能参与一次活动、一个用户只能中奖一次等等去重场景
哈希(Hash)键值对的集合,可以存储多个字段和对应的值。常用于保存结构体信息

        与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快, 因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案

Redis有哪些优缺点?

为什么要用 Redis 而不用 map做缓存?

RedisMap
内存管理Redis是专门设计用于内存存储的数据库,它有着高效的内存管理机制,Redis会对存储的数据进行优化和压缩,以提高内存利用率使用普通的Map做缓存,需要手动管理内存,容易导致内存泄漏或者内存溢出的问题
持久化支持Redis支持数据的持久化,可以将内存中的数据保存到磁盘上,以便在重启后恢复数据Map只是内存中的数据结构,重启后数据会丢失
多种数据结构支持Redis不仅仅是一个简单的键值存储,它支持多种数据结构,如字符串、列表、哈希、集合和有序集合等;Redis可以更灵活地处理不同类型的数据Map只能存储简单的键值对
分布式支持Redis可以通过主从复制和集群模式实现数据的分布式存储和高可用性使用Map做缓存,需要开发者自行实现分布式缓存机制,增加了复杂性和开发成本
其他功能支持Redis还提供了其他功能,如发布订阅、事务处理和Lua脚本执行等;使得Redis在缓存、消息队列和计数器等场景下有更广泛的应用

Redis为什么这么快/为啥 redis 单线程模型也能效率这么高?

避免线程切换开销在多线程模型中,线程之间的切换会带来额外的开销,包括上下文切换、线程调度等;而Redis单线程模型避免了这些开销,减少了不必要的资源消耗
内存操作效率高Redis主要依赖于内存进行数据存储和操作,而内存操作的速度远远快于磁盘操作单线程模型使得Redis能够充分利用内存的高速读写能力,从而提高了数据访问的效率
高效的事件驱动机制Redis采用事件驱动的方式处理客户端请求和其他操作;通过使用I/O多路复用技术,Redis能够同时监听多个文件描述符上的事件,实现高效的事件驱动;这种机制使得Redis能够在单线程下处理大量的并发请求,提高了系统的吞吐量
高效的数据结构和算法Redis内部使用了高效的数据结构和算法,如哈希表、跳跃表、压缩列表等;这些数据结构和算法在内存占用和操作效率上都进行了优化,能够提供高性能的数据访问和操作
异步非阻塞I/ORedis采用非阻塞I/O来实现网络通信避免了线程阻塞等待I/O完成的情况;通过异步非阻塞的方式,Redis能够在等待网络数据时继续处理其他请求,提高了系统的并发能力和响应速度

        

        需要注意的是,尽管Redis的单线程模型能够在大部分场景下提供高效率,但在面对大量的计算密集型操作时,单线程模型可能会受到性能影响;在这种情况下,可以考虑使用多个Redis实例或集群来进行水平扩展,以提高系统的整体性能

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值