Redis使用的相关问题
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使用的相关问题的更多相关文章
- Redis使用记录-相关资料汇总
1 redis在centos上的安装 http://www.cnblogs.com/hanyinglong/p/5036558.html 2 redis在windows上的可视化GUI工具 https ...
- Redis基础及其相关面试题
Redis持久化 一.持久化简介 Redis 的数据 全部存储 在 内存 中,如果 突然宕机,数据就会全部丢失,因此必须有一套机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis ...
- openresty 学习笔记三:连接redis和进行相关操作
openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...
- redis事务及相关命令介绍
redis事务及相关命令介绍 一.概述:和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事 ...
- Redis 键(key)相关的命令及其它命令的查看地址
Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME ...
- redis集群相关
1.主从数据库配置 为master数据库添加slave数据库只需要在从数据库的配置中添加配置: slaveof 主数据库地址 主数据库端口 当然,也可以通过命令: redis-server --por ...
- redis运维相关(基本数据库命令)【十四】
-----------------------------运维相关------------------------- redis持久化,两种方式1.rdb快照方式2.aof日志方式 --------- ...
- Redis Cluster 原理相关说明
背景 之前写的 Redis Cluster部署.管理和测试 和 Redis 5.0 redis-cli --cluster help说明 已经比较详细的介绍了如何安装和维护Cluster.但关于Clu ...
- redis运维相关
一.redis都有哪些数据类型?分别在哪些场景下使用比较合适?二.redis双写不一致三.雪崩和穿透四.redis的过期策略,LRU五.redis是如何实现高性能高并发六.如何保证Redis的高并发和 ...
- redis 安装及相关问题解决
安装redis 下载,或者用scp命令从其他服务器拷贝 一.安装 解压:tar -zxvf redis-3.0.1.tar.gz 进入:cd redis-3.0.1 编译: make 二.解决问题 1 ...
随机推荐
- python _、__和__xx__的区别(转)
本位转载自:http://www.cnblogs.com/coder2012/p/4423356.html "_"单下划线 Python中不存在真正的私有方法.为了实现类似于c++ ...
- cookie和session的原理机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 【题解】P3796【模板】AC自动机(加强版)
[题解]P3796 [模板]AC自动机(加强版) 记录当前\(cnt\)是第几个"星".记录第几个串是对应着第几个星. 这里补充一点对于\(AC\)自动机的理解.可能一直有个问题我 ...
- CentOS下配置静态IP
第一.在VMware中进行配置使用桥接的方式.点击编辑选择虚拟网络编辑器 选择桥接模式,选择桥接到外部的网卡.选择我们主机下的网卡 第二步.配置虚拟机使用桥接模式 第三步:启动虚拟机进入到 /etc/ ...
- 【转载】基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...
- jQuery 的文档操作
在 js 中也有DOM操作,也可以进行 增删改查 ,但是通过 js 的DOM操作会发现,我的天哪,代码好多.但是 jQuery的文档操作就少了很多. js 中 DOM 的示例 : var box = ...
- Zabbix监控华为交换机
一. 监控交换机首先要在交换机开通snmp协议. 有两种方式开通,web界面,及交换机的配置界面 Web界面开通: 交换机配置界面 有web界面的,使用web界面相对简单,本项目就是用web界面 ...
- L91
Make Healthy Choices Easier Options Telling people to change unhealthy behaviors doesn't work. Other ...
- intent实现Activity之间跳转的各种传值
一.在Activity之间传递String类型的数据 传递 @Override public void onClick(View v) { String num1 = firstNum.getText ...
- POJ-3680:Intervals (费用流)
You are given N weighted open intervals. The ith interval covers (ai, bi) and weighs wi. Your task i ...