Redis常问, 从 redis优缺点开始 一环套一环

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis常问, 从 redis优缺点开始 一环套一环

前言

这是 面试 专栏的第二篇文章, 简单的从 Redis 的优缺点开始说了四个常见的面试题

讲一下 Redis 的优缺点

Redis 是 Key-Value 数据库也是内存数据库, 数据都存储在内存中, 和 Redis 一样的还有 Memcached 数据库, 都是定期的将数据刷新到硬盘中

Redis 的性能很高, 读的速度可以达到110000次/s,写的速度可以达到81000次/s, 单个 Key 和 Value 能存储最大 512MB 大小的数据, 这个在 官方文档 是有相关说明的, 但是通常建议 Key 的大小不超过 1kb

而 Memcached 的 Key 最长为 250字节, Value 最大存储数据为 1MB, 如果超过 1MB get/set 都是 false, 并且会引起性能问题

网络异常,图片无法展示
|

第一个红框: 建议 key 的大小不超过 1kb
第二个红框: key 最大能存储 512MB 的数据
复制代码

网络异常,图片无法展示
|

红框内容: value 最大能存储 512MB 的数据
复制代码

同时, Redis 相比如 Memcached 支持的数据结构更多, 有 set, string, zset, hash, list 五种, 且可以设置过期时间

Redis 的过期策略是: 定期删除和惰性删除, 定期删除是每隔 100ms 就随机抽取设置了过期时间的 key, 如果过期了就删除, 惰性删除是用到了这个 key 检测一下过期时间, 过期了就删除, Memcached 只有惰性删除

缺点: 因为 Redis 是内存数据库, 所以容量受到物理内存的限制, 如果是大量数据操作要进行优化, 升级 CPU 内存, 或者切片集群

你刚刚说到了内存, 为什么把数据放到内存中

普通数据库在操作的时候, 都是在硬盘内操作, 相对于内存来讲, 非常慢 , 所以放在了内存,

优点: 数据保存快, 缺点: 数据不能长久保存, 如果想数据库 IO操作 快的话, 就要把数据放入到内存中, 再把数据以异步的方式存到硬盘中, 所以, redis 就有了 快速操作硬盘持久化 的特征

如果不把数据放入内存, IO操作就会很慢, 所以 redis 是比较依赖于内存的, 目前 内存越来越便宜, redis 的使用可能会更加常态化

如果 redis 设置了 内存使用数, 一旦记录数到了上线之后就写不进去了, 也是 redis的一个很大的问题

OK, 你有说 Redis 有 持久化 特征, 那么 Redis 的持久化是怎么实现的?

Redis 提供了两种持久化机制, 分别是 RDB 和 AOF:

  • RDB 是把内存中的数据以快照的形式写入到磁盘中, 实际操作是通过 fork 子进程执行, 采用二进制压缩存储; 是对 Redis 中的数据执行 周期性 的持久化
  • AOF 是写后日志, 是以文本日志的形式记录 Redis 处理的 每一个 写入或删除操作
标题 RDB AOF
优点 每份数据文件都代表某一时刻 Redis 中的数据, 适合做冷备RDBRedis 的性能影响小, 恢复速度快 AOF 是一秒一次去通过后台线程 fsync 操作, 所以最多会丢失一秒的数据, 适合做 灾难性数据误删除 的紧急恢复
缺点 RDB 都是快照文件, 默认五分钟或者更久生成一次, 会丢失数据, 在生成数据快照的时候, 如果文件很大, 客户端可能会停止几毫秒或者几秒 一样的数据 AOF 文件比 RDB 文件大, 开启 AOF 后, Redis 支持的 QPS 会有所下降

假如 redis 里面有 10亿个 key, 其中 十万个 key 是以某个前缀开头的, 怎么找出来

直接使用 keys, 指定模式就可以了, 使用 keys 命令的时间复杂度为 O(N), N为数据库中拥有 keys 的个数, 需要注意的是, 如果是生产环境下进行大规模查询, 不能使用 keys 命令

因为 redis 是单线程的, 在大数据量的情况下, 使用 keys 会造成线程的阻塞, 线上服务的卡顿, 如果是在线上环境的话, 可以使用 scan 指令

可以无阻塞的去获取, 但是可能会有部分重复数据, 需要后续给他做个去重操作, 但是这个指令的执行时间要比 keys 长一些


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
16天前
|
运维 NoSQL 前端开发
介绍一下Redis的优缺点
【10月更文挑战第19天】介绍一下Redis的优缺点
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
301 2
|
4月前
|
存储 NoSQL 固态存储
架构设计篇问题之将计数全部存储在Redis中的问题如何解决
架构设计篇问题之将计数全部存储在Redis中的问题如何解决
|
存储 消息中间件 缓存
Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用
@[TOC](目录) Redis 是一个基于内存的开源数据库系统,被广泛应用于 Web 应用、消息队列、缓存、实时统计等领域。下面是 Redis 的详解,包括安装命令、应用场景和优缺点,以及案列分析和各个开发语言如何应用。此外,还提供了一些具体代码示例。 # 1、安装命令 Redis 的安装命令因操作系统而异。以下是几种常见操作系统的安装命令: - Linux: - 对于 Ubuntu 和 Debian,可以使用以下命令安装 Redis: ``` sudo apt-get update sudo apt-get install redis-server
106 0
|
存储 消息中间件 缓存
redis 优缺点 使用场景
redis 优缺点 使用场景
224 0
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(三)
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(三)
302 0
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(三)
|
NoSQL 安全 容灾
【面试常问】Redis的持久化机制是什么?各自的优缺点?
Redis在我们日常开发中是必不可少的,但是有可能会造成数据的丢失,因此就有了持久化机制,而 Redis的持久化机制也是面试中的高频问题,决定整理一下;如有错误还请个位指正!
199 0
|
NoSQL Redis 数据安全/隐私保护
Redis如何实现持久化(AOF、RDB、混合模式)的优缺点
Redis如何实现数据不丢失 Redis的读写操作都是在内存中,所以Redis性能才会高,但是当Redis重启后,内存中的数据就会丢失,那为了保存内存中的数据不会丢失,Redis实现了数据持久化机制,会把数据保存到磁盘,这样Redis重启就能够从磁盘恢复原有的数据
249 0
Redis如何实现持久化(AOF、RDB、混合模式)的优缺点
|
存储 缓存 NoSQL
Redis是什么?简述它的优缺点
Redis是什么?简述它的优缺点
635 0
|
索引
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(二)
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(二)
217 0
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(二)