Redis用那些数据结构?

  • 字符串类型String
  • 字典Hash
  • 列表List
  • 集合Set
  • 有序集合SortedSet
  • HyperLogLog、Geo、Pub/Sub
  • Redis Module、BloomFilter、RedisSearch、Redis-ML

Redis分布式锁,是什么?

  • 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。
  • 如果在setnx之后,执行expire之前进程意外crash或重启维护, 那么就需要把setnx和
    expire合成一条指令来用。

假如Redis里面有一亿个key,其中10万个key是以某个固定的已知前缀开头的,如何将它们全部找出来?

  • 使用keys指令可以扫出指定模式的key列表。
  • 如果这个redis正在给线上的业务提供服务,那么使用key指令会导致线程阻塞。(redis是单线程的,执行key指令期间,线上服务会卡顿,直到指令执行完成,服务才会恢复)。在这种场景下,就可以使用scan指令,该指令可以无阻塞的提取出指定模式的key列表,但是会有一定重复的概率,可以在客户端做一次去重就好了, 但是整体花费的时间会比直接使用keys指令长。

怎么使用Redis做异步队列?

  • 一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。(如果不用sleep, list还有个指令blpop, 在没有消息的时候, 他会阻塞住直到有消息到来)。
  • 如果要生产一次消费多次,则需要使用pub/sub主题订阅者模式,可以实现1:N的消息队列。(在消费者下线的情况下,生产的消息会丢失。在这种情况下, 就得使用更专业的消息队列了,例如rabbitmq)

如何实现redis延时队列?

  • 使用sortedset, 拿时间戳作为score, 消息内容作为key调用zadd来生产消息, 消费者用zrangebysocre指令获取N秒之前的数据轮询进行处理。

如果有大量的key需要设置统一时间过期,需要注意什么?

  • 如果有大量的key过期时间设置过于集中, 到过期的那个时间点, redis可能会出现短暂的卡顿现象。一般需要在时间生加上一个随机值, 使得过期时间分散一些。

redis如何做持久化?

  • bgsave做镜像全量持久化, aof做增量持久化。因为bgsave会耗费较长时间, 不够实时, 在停机的时候会导致大量丢失数据, 所以aof来配合使用。在redis实例重启时, 会使用bgsave持久化文件重新构建内存, 在使用aof重放近期的操作指令来实现完整恢复重启之前的状态。
  • 如果不要求性能, 在每条写指令是都sync一下磁盘, 就不会丢失数据。但是在高性能的要求下每次都sync是不现实的, 一般都使用定时sync, 比如1s1次, 这个时候最大就会丢失1s的数据。
  • bgsave的原理是, fork和cow。fork是指redis通过创建子进程来进行bgsave操作, cow指的是copy on write, 子进程创建后, 父进程通过共享数据段, 父进程继续提供读写服务, 写脏的页面数据会逐渐和子进程分离开来。

pipeline有什么好处?

  • 可以将多次IO往返的时间缩减为一次, 前提是pipeline执行的指令质检没有因果相关性。使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是piepline批次指令的数目。

redis的同步机制是如何操作的?

redis可以使用主从同步, 从从同步。第一次同步时, 主节点做一次bgsave, 并同时将后续修改操作记录到内存buffer, 待完成后将rdb文件全量同步到复制节点, 复制节点接受完成后, 将rdb镜像加载到内存。加载完成后, 再通知主节点将修改期间的操作 记录同步到复制节点进行重放就完成了同步过程。

redis集群的原理?

  • redis sentinal着眼于高可用, 在master宕机时会自动将slave提升为master, 继续提供服务。
  • redis cluster着眼于扩展性, 在单个redis内存不足时, 使用cluster进行分片存储。

Redis使用的相关问题的更多相关文章

  1. Redis使用记录-相关资料汇总

    1 redis在centos上的安装 http://www.cnblogs.com/hanyinglong/p/5036558.html 2 redis在windows上的可视化GUI工具 https ...

  2. Redis基础及其相关面试题

    Redis持久化 一.持久化简介 Redis 的数据 全部存储 在 内存 中,如果 突然宕机,数据就会全部丢失,因此必须有一套机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis ...

  3. openresty 学习笔记三:连接redis和进行相关操作

    openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...

  4. redis事务及相关命令介绍

    redis事务及相关命令介绍 一.概述:和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事 ...

  5. Redis 键(key)相关的命令及其它命令的查看地址

    Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME ...

  6. redis集群相关

    1.主从数据库配置 为master数据库添加slave数据库只需要在从数据库的配置中添加配置: slaveof 主数据库地址 主数据库端口 当然,也可以通过命令: redis-server --por ...

  7. redis运维相关(基本数据库命令)【十四】

    -----------------------------运维相关------------------------- redis持久化,两种方式1.rdb快照方式2.aof日志方式 --------- ...

  8. Redis Cluster 原理相关说明

    背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...

  9. redis运维相关

    一.redis都有哪些数据类型?分别在哪些场景下使用比较合适?二.redis双写不一致三.雪崩和穿透四.redis的过期策略,LRU五.redis是如何实现高性能高并发六.如何保证Redis的高并发和 ...

  10. redis 安装及相关问题解决

    安装redis 下载,或者用scp命令从其他服务器拷贝 一.安装 解压:tar -zxvf redis-3.0.1.tar.gz 进入:cd redis-3.0.1 编译: make 二.解决问题 1 ...

随机推荐

  1. vscode webstrom 配置 eslint 使用 airbnb 规范

    1.安装eslint npm eslint-plugin-react eslint-plugin-import babel-eslint -g 2.全局配置文件,放到c:/user/***/ { &q ...

  2. rtmp直播拉流客户端EasyRTMPClient设计过程中时间戳问题汇总

    EasyRTMPClient 简介 EasyRTMPClient是EasyDarwin流媒体团队开发.提供的一套非常稳定.易用.支持重连接的RTMPClient工具,以SDK形式提供,接口调用非常简单 ...

  3. 九度OJ 1031:xxx定律 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6058 解决:3816 题目描述:     对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数 ...

  4. static 不被实例调用

    static - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/ ...

  5. process_thread_action

    import psycopg2 import threading conn_fmac = psycopg2.connect(database='filter_useless_mac', user='u ...

  6. 【题解】P2279消防局的设立

    [题解][P2279 HNOI2003]消防局的设立 又是一道贪心. 随便指定一个点为根,可以知道在覆盖了一个节点的子树的情况下,消防站越高越好.那么我们就贪心吧.\(trick\)是按深度\(pus ...

  7. 我的Java开发学习之旅------>Java NIO 报java.nio.charset.MalformedInputException: Input length = 1异常

    今天在使用Java NIO的Channel和Buffer进行文件操作时候,报了java.nio.charset.MalformedInputException: Input length = 1异常, ...

  8. JavaScript学习笔记(持续更新)

    函数有“定义式”和“变量式”两种写法的区别 函数有“定义式”和“变量式”两种写法,两者基本区别不大.主要区别在于,如果在同一个代码块(Script标签对)定义两个同名的函数,浏览器在预编译代码时,使用 ...

  9. SVG圆盘时钟动画

    在线演示 本地下载

  10. Kafka0.7运行时报错 kafka/javaapi/consumer/ConsumerConnector : Unsupported major.minor version 51.0 解决

    目前中央库中 org.apache.kafka 是用jdk1.7编译的, 故跑在1.6的jvm中会报错 解决方案: 1. 下载kafka源码, 本地sbt进行install, 编译前 java -ve ...