Redis复习+面试题

2023-05-16

目录

1.Redis五大数据类型及使用场景:


1.Redis五大数据类型及使用场景:

  • String:Redis的字符串是动态字符串,内部表示是一个字符数组,这里提Python的字符串是无法修改的。一般用来做一些复杂的计数功能的缓存(项目里使用了字符串来记录毫米级时间)
SET KEY VALUE    #设置或修改一个字符串
GET              #获取
MSET             #多次添加
MGET KEY1 KEY2...
INCR KEY         #使一个整型的KEY自增1   "18"
INCRBY           #设定自增步长,也可以用来自减,等同于DECR
INCRBYFLOAT      #浮点数增长
SETNX KEY VALUE  #如果存在,不修改,不存在则新建 等同于SET KEY VALUE NX
SETEX KET VALUE  #添加一个KEY,并设置有效期
  • List:底层为一个双向链表结构,有序,一般用来做消息队列
LPUSH KEY ELEMENT...   #从左侧插入一个元素
LPOP KEY [COUNT]           #从左侧弹出一个元素
RPUSH KEY ELEMENT   #从右侧插入一个元素
RPOP KEY            #从右侧弹出一个元素
LRANGE KEY START END #返回从START到END的所有元素
BLPOP BRPOP #和前面类似,区别在于如果没有元素时使用该指令会等待指定时间,而不是直接返回nil
  • Hash:散列,无序字典,存储、读取、修改对象属性
HSET KEY FIELD VALUE
HGET KEY FIELD
HMSET KEY FIELD1 VALUE1 FIELD2 VALUE2
HMGET KEY FIELD1 FIELD2
HGETALL #获取该KEY的所有键值对
HKEYS #获取Hash类型所有的KEY(FIELD)
HVALS #获取KEY中所有的值
HINCRBY #让一个Hash类型的KEY字段值增长指定步长
HSETNX #

顺带提一嘴,Redis中无法给Hash的元素和Set的元素设置过期时间,但是可以给整个Set或Hash设置过期时间。至于为什么Redis不给这些类型的元素设置过期时间是因为不可能支持这样的 feature,因为违背了 Redis 的设计理念:简单、高效。 不过,在 Google Group 上看到 Redis 的作者针对这类需求给出了 2 个实现方案

  • Set:集合。无序,查找快,元素无重复,支持集合运算
SADD KEY MEMBER  #增
SREM KEY MEMBER  #删
SCARD KEY        #返回元素个数
SISMEMBER KEY MEMBER #判断元素是否属于集合
SMEMBERS KEY     #获取KEY中所有的MEMBER
  • SortedSet:有序集合,查找快,元素无重复,每个元素都带有一个double类型的score
ZADD key score member #添加一个或多个元素到sorted set,如果已经存在则更新其score值
ZREM key member       #删除sorted set中的一个指定元素
ZSCORE key member     #获取sorted set中的指定元素的score值
ZRANK key member      #获取sorted set中的指定元素的排名
ZCARD key             #获取sorted set中的元素个数
ZCOUNT key min max    #统计score值在给定范围内的所有元素的个数
ZINCRBY key increment member  #让sorted set中的指定元素自增,步长为指定的increment值
ZRANGE key min max    #按照score排序后,获取指定排名范围内的元素
ZRANGEBYSCORE key min max     #按照score排序后,获取指定score范围内的元素
ZDIFF、ZINTER、ZUNION         #求差集、交集、并集

PS:set和zset的元素都是字符串类型

set一般使用在有共同特点的场景上,zset可以用来做排行等

更加详细请参考:Redis五种数据类型及应用场景 - 腾讯云开发者社区-腾讯云 (tencent.com)

2.Redis是单线程还是多线程

无论什么版本,工作线程(执行命令的核心模块)只有一个。在6.x版本中出现了IO多线程,需要注意的是这个 Theaded IO 指的是在网络 IO 处理方面上了多线程,如网络数据的读写和协议解析等

为什么Redis很快?还是单线程?

个人理解:Redis快的原因无非两个重要原因:①Redis是基于内存的数据库,所有的操作都在内存上进行②Redis都是简单的key-value数据结构,所以比较快,据官方给出的数据,redis在一个普通的linux上部署,一秒内可以发送一百万的请求,如果还不能满足需求,官方推荐启动多个Redis实例。如果使用多线程还需要考虑数据安全性,再者操作数据时需要加锁,进而也影响了程序的执行速度和效率。总的来说Redis单线程已经够快了,完全没有必要采用多线程。

3.Redis性能的瓶颈

于上个问题可知Redis的瓶颈不在CPU,主要是①机器内存和②网络带宽(网络状态)

4.Redis为什么效率高

①因为它是内存数据库;

②归功于它的数据结构;

③Redis 中是单线程;

④Redis 中使用了多路复用。

5.Redis和MySQL的区别

  • 数据层面:

MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢              Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限

  • 使用场景

MySQL用于持久化的存储数据到硬盘,功能强大,但是速度较慢                                                  Redis用于存储使用较为频繁的数据到缓存中,读取速度快.

  • 存放位置

 MySQL:数据放在磁盘                                                                                                               Redis:数据放在内存

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis复习+面试题 的相关文章

  • 有没有办法在 Redis 和关系数据库中使用带有 @RedisHash 的实体?

    我正在使用Spring引导 为了将我的实体保存在关系数据库上 我配置了一个数据源和我的域类 例如 Entity Table schema schema name name tb name public class table name ex
  • Redis 写入 .ssh/authorized_keys

    当前设置 2 个主服务器 12 个工作服务器 工作人员通过 ssh copy id 连接到主设备 主设备和工作人员正在主设备上的 redis 队列中写入数据 过去一周我遇到的问题是 Redis 正在将数据写入authorized keys
  • 使用 sidekiq 处理两个独立的 Redis 实例?

    下午好 我有两个独立但相关的应用程序 他们都应该有自己的后台队列 阅读 单独的 Sidekiq 和 Redis 进程 然而 我希望偶尔能够将工作推给app2的队列来自app1 从简单的队列 推送的角度来看 如果app1没有现有的 Sidek
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 在 sidekiq 上配置 redis 身份验证

    我想我错过了一些东西 因为我在文档中找不到如何编写 redis 实例的用户名和密码以与 sidekiq 一起使用 有没有办法做到这一点 或者是通过 ENV 变量 Sidekiq 将无法识别的 Redis 选项直接传递给 Redis 驱动程序
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc

随机推荐

  • linux系统线程池

    简述 一个进程中的线程就好比是一家公司里的员工 xff0c 员工的数目应该根据公司的业务多少来定 xff0c 太少了忙不过来 xff0c 但是太多了也浪费资源 最理想的情况是让进程有一些初始数目的线程 xff08 线程池 xff09 xff
  • STM32串口环形缓冲区

    目录 1 xff1a 概述 2 xff1a 代码 1 xff1a 概述 1 1 xff1a 本篇实现串口驱动 xff0c 实现printf函数的重定向 xff0c 实现串口的中断接受和发送 xff0c 效仿modbus协议中的3 5T超时机
  • 天地飞6通道遥控器解码

    在做四轴 xff0c 想到要改造一下遥控器 我用的是天地飞6通道2 4G版 改造的思路是这样的 xff1a 用M8单片机读取PPM信号 xff0c 用液晶显示出6个通道的解码 xff0c 当然这个解码还需要根据飞控板进行一下 校准 xff0
  • 如何计算网络协议校验和以及为什么这么计算

    一 校验和是如何计算的 xff1f 这个问题牵扯到计算机最底层最神秘的部分 二进制运算 说实话 xff0c 从学计组计统起 xff0c 我就比较讨厌思考二进制的相关运算 但毕竟是学这个的 xff0c 只好硬着头皮想了 首先发送方校验和的计算
  • JAVA又臭又长,是一门垃圾语言,早晚会被淘汰

    1 JAVA又臭又长 xff0c 是一门垃圾语言 xff0c 早晚会被淘汰 2 JAVA能做的 xff0c python 等上层解释类语言大部分都可以坐到 3 JAVA为了面向对象而面向对象 xff0c 导致程序冗长 xff0c 效率低下
  • 封装OkHttp

    懒汉 安全 加同步 私有的静态成员变量 只声明不创建 私有的构造方法 提供返回实例的静态方法 private static OkHttpClient okHttpClient 61 null private OkHttp3Util publ
  • WXP380 电容式MEMS高性能数字气压传感器 电容式MEMS压力传感器快速代DPS310 BMP380 SLP06 HP303B “电容式”噪声超低的高精度MEMS气压传感器;

    午芯高科WXP380气压传感器 稳定供应 填补国内空白 2 WXP380气压传感器的 电容式 MEMS芯片填补了国内技术空白 xff01 高性能 xff1a 电容式 噪声超低的高精度MEMS气压传感器 xff1b 高度差测量精确度小至2cm
  • 解决ros的rosdep update报错的问题。

    参见以下文章 xff1a https blog csdn net leida wt article details 115120940 如果 xff1a https raw githubusercontent com ros rosdist
  • Docker报错Error spawning command line “dbus-launch --autolaunch=xxx --binary-syntax --close-stderr”

    环境 xff1a ubuntu 18 报错描述 xff1a Error spawning command line dbus launch autolaunch 61 a3d9197b765643568af09eb2bd3e5ce7 bin
  • 一种测量STM32程序执行时间的方法

    同名微信公众号 固件工人 同步发布的文章 xff0c 欢迎同时关注 xff0c 及时获取最新文章 1 1 背景 在单片机的固件开发过程中 xff0c 有的时候需要评估固件代码的执行性能 xff0c 会对部分关键程序代码的执行时间进行测量 通
  • STM32使用内核System Tick定时器实现微秒延时

    同名微信公众号 固件工人 同步发布的文章 xff0c 欢迎同时关注 xff0c 及时获取最新文章 在单片机的程序开发中 xff0c 延时一般都会用到 xff0c 在对延时精度要求不高的场合 xff0c 一般使用软件延时实现 xff0c 就是
  • STM32软件模拟I2C从机的实现方法

    1 1 前言 在使用I2C通信时 xff0c 一般会用到软件模拟I2C 目前网络上能搜索到的软件模拟I2C一般都是模拟I2C主机 xff0c 很少有模拟I2C从机的例程 由于I2C主机在进行数据收发时 xff0c 有明确的可预见性 xff0
  • Ubuntu下QT创建带菜单和工具栏的窗口

    同名微信公众号 固件工人 同步发布的文章 xff0c 欢迎同时关注 xff0c 及时获取最新文章 1 1 测试平台 这里使用的开发环境如下 操作系统 xff1a Ubuntu 20 04 2 LTS x86 64 xff08 使用uname
  • wxWidgets学习:Ubuntu下cmake编译链接wxWidgets源码报错[Could NOT find GSTREAMER]

    同名微信公众号 固件工人 同步发布的文章 xff0c 欢迎同时关注 xff0c 及时获取最新文章 1 测试平台 这里使用的开发环境如下 操作系统 xff1a Ubuntu 20 04 2 LTS x86 64 xff08 使用uname a
  • VS2012 C++/CLR 无法创建Windows窗体应用程序的解决方法

    参考资料链接 xff1a 1 https zhidao baidu com question 493819968 html 2 http blog csdn net dreamrabbit article details 9044999 在
  • VC中自定义打印调试信息函数,打印调试信息到DebugView上

    该文档参考了以下网友的文章 xff0c 在此表示感谢 1 xff08 更新 xff09 OutputDebugString函数简单封装 xff0c 实现格式化打印输出 xff08 VC 43 43 xff09 链接 xff1a http b
  • C语言编译器之三,VC++

    三 Visual C编译器 Microsoft Visual C 43 43 xff08 简称Visual C 43 43 MSVC VS或VC xff09 是微软公司的免费C 43 43 编译器与开发工具 xff0c 具有集成开发环境 x
  • 彻底弄懂计算机中的大端小端

    大端与小端这个问题在做和其他设备交换原始字节数据的时候是非常重要的概念 xff0c 也是必须要掌握的内容 xff0c 但是很多人就是仅仅是稍微有些了解 xff0c 但每次真正去做东西的时候 xff0c 还是要花半天去想 xff0c 博主就是
  • QGC 报错 Fail: No CPU load information

    据说是因为bootloader与px4固件版本不匹配 xff0c 需要修改qgc中的参数 xff1a 使其能够在安装固件的时候更新到匹配版本的bootloader 步骤一 xff1a 修改 SDLOG PROFILE 参数从 default
  • Redis复习+面试题

    目录 1 Redis五大数据类型及使用场景 xff1a 1 Redis五大数据类型及使用场景 xff1a String xff1a Redis的字符串是动态字符串 xff0c 内部表示是一个字符数组 xff0c 这里提Python的字符串是