Redis
文章平均质量分 88
stevsun
Keep calm and carry on
展开
-
MySQL的索引为什么使用B+树而不使用跳表?
B+树是多叉平衡搜索树,扇出高,只需要3层左右就能存放2kw左右的数据,同样情况下跳表则需要24层左右,假设层高对应磁盘IO,那么B+树的读性能会比跳表要好,因此mysql选了B+树做索引。redis的读写全在内存里进行操作,不涉及磁盘IO,同时跳表实现简单,相比B+树、AVL树、少了旋转树结构的开销,因此redis使用跳表来实现ZSET,而不是树结构。存储引擎RocksDB内部使用了跳表,对比使用B+树的innodb,虽然写性能更好,但读性能属实差了些。在读多写少的场景下,B+树依旧YYDS。转载 2023-02-15 11:08:11 · 944 阅读 · 0 评论 -
SkipList跳表详解
跳表是可以实现二分查找的有序链表;每个元素插入时随机生成它的level;最底层包含所有的元素;如果一个元素出现在level(x),那么它肯定出现在x以下的level中;每个索引节点包含两个指针,一个向下,一个向右;(笔记目前看过的各种跳表源码实现包括Redis 的zset 都没有向下的指针,那怎么从二级索引跳到一级索引呢?留个悬念,看源码吧,文末有跳表实现源码)跳表查询、插入、删除的时间复杂度为O(log n),与平衡二叉树接近;转载 2023-02-14 19:31:43 · 491 阅读 · 0 评论 -
Redis的事务功能
MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。 > 在一个Redis事务中,Re...转载 2020-03-19 09:59:14 · 258 阅读 · 0 评论 -
Redis主从复制原理
主从复制过程和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构。全量同步Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份...转载 2020-03-18 14:32:49 · 318 阅读 · 0 评论 -
基于Redis实现的分布式锁
写在前面现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了...转载 2020-03-17 18:28:16 · 301 阅读 · 0 评论 -
Redis 性能问题分析
在一些网络服务的系统中,Redis 的性能,可能是比 MySQL 等硬盘数据库的性能更重要的课题。比如微博,把热点微博1,最新的用户关系2,都存储在 Redis 中,大量的查询击中 Redis,而不走 MySQL。那么,针对 Redis 服务,我们能做哪些性能优化呢?或者说,应该避免哪些性能浪费呢?Redis 性能的基本面在讨论优化之前,我们需要知道,Redis 服务本身就有一些特性,比如单...转载 2020-03-16 23:17:16 · 689 阅读 · 0 评论 -
Redis的rehash机制
在Redis中,键值对(Key-Value Pair)存储方式是由字典(Dict)保存的,而字典底层是通过哈希表来实现的。通过哈希表中的节点保存字典中的键值对。我们知道当HashMap中由于Hash冲突(负载因子)超过某个阈值时,出于链表性能的考虑,会进行Resize的操作。Redis也一样。在redis的具体实现中,使用了一种叫做渐进式哈希(rehashing)的机制来提高字典的缩放效率,避免...转载 2020-03-14 13:00:10 · 2583 阅读 · 4 评论 -
Redis五种数据类型的底层实现
简介Redis的五大数据类型也称五大数据对象;前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject;这个对象系统包含了五大数据对象,字符串对象(string)、列表对象(list)、哈希对象(hash)、集合(set)对象和有序集合对象(zset);而这五大对象的底层数据编码可以用命令OBJECT ENCODING来...转载 2020-02-24 17:52:32 · 3132 阅读 · 0 评论 -
Redis 和 I/O 多路复用
最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入...转载 2019-09-04 17:10:44 · 168 阅读 · 0 评论 -
深入Redis HyperLogLog内部数据结构
HyperLogLogHyperLogLog算法是一种非常巧妙的近似统计海量去重元素数量的算法。它内部维护了 16384 个桶(bucket)来记录各自桶的元素数量。当一个元素到来时,它会散列到其中一个桶,以一定的概率影响这个桶的计数值。因为是概率算法,所以单个桶的计数值并不准确,但是将所有的桶计数值进行调合均值累加起来,结果就会非常接近真实的计数值。为了便于理解HyperLogLog算法,...转载 2019-04-01 13:00:29 · 3161 阅读 · 2 评论 -
Redis大Key优化
Redis 大keyRedis使用过程中经常会有各种大key的情况, 比如:单个简单的key存储的value很大hash, set,zset,list 中存储过多的元素(以万为单位)由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,所以,业务上能拆则拆,下面举几个典型的分拆方案。业务场景:即通过hash的方式来存储每一天用户订单次数...转载 2019-03-25 23:10:28 · 8718 阅读 · 0 评论 -
Redis Cluster 集群扩容与收缩
Redis Cluster 集群伸缩1. 伸缩原理Redis提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以对下线节点进行缩容。 我们在《Redis Cluster 介绍与搭建》这篇文章中搭建了一个三主三从的Redis集群(如下图所示)。在搭建 Redis Cluster 通信流程剖析这篇博客中根据源码详细剖析了搭建集群的流程。 本篇博...转载 2018-07-05 15:14:12 · 430 阅读 · 0 评论 -
Redis Cluster 介绍与搭建
Redis Cluster 介绍与搭建1. Redis Cluster介绍Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。1.1 数据分布理论分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据...转载 2018-07-05 12:01:04 · 414 阅读 · 0 评论 -
Redis Sentinel 介绍与部署
Redis Sentinel 介绍与部署1. Sentinel介绍1.1 主从复制的问题Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用:一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。扩展主节点的读能力,分担主节点读压力。但是问题来了:一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节...转载 2018-07-05 11:34:28 · 238 阅读 · 0 评论 -
Redis和Memcached如何存储PHP数组
可以以string类型的方式存储。 1、可使用PHP自带的json_encode和json_decode转换成json。 2、使用PHP自带的序列化函数serialize和unserialize函数。 注:memcached在存储数组时, PHP的memcached的驱动会自动进行serialize和unserialize原创 2016-03-01 15:48:17 · 5347 阅读 · 0 评论 -
垃圾收集器:引用计数算法
引用计数算法作为垃圾收集器最早的算法,有其优势,也有其劣势,虽然现在的JVM都不再采用引用计数算法进行垃圾回收【例如Sun的Java hotspot采用了火车算法进行垃圾回收】,但这种算法也并未被淘汰,在著名的单进程高并发缓存Redis中依然采用这种算法来进行内存回收【后绪会以Redis作为例子,说明该算法】什么是引用计数算法直白一点,就是对于创建的每一个对象都有一个与之关联的计数器,这个计数器记录转载 2016-03-02 19:55:56 · 525 阅读 · 0 评论 -
Redis内存回收:LRU算法
Redis中采用两种算法进行内存回收,引用计数算法以及LRU算法,在操作系统内存管理一节中,我们都学习过LRU算法(最近最久未使用算法),那么什么是LRU算法呢LRU算法作为内存管理的一种有效算法,其含义是在内存有限的情况下,当内存容量不足时,为了保证程序的运行,这时就不得不淘汰内存中的一些对象,释放这些对象占用的空间,那么选择淘汰哪些对象呢?LRU算法就提供了一种策略,告诉我们选择最近一段时间内,转载 2016-03-02 20:02:07 · 2513 阅读 · 0 评论 -
Redis持久化RDB和AOF
Redis 持久化:提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF.RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后转载 2016-08-16 14:37:18 · 509 阅读 · 0 评论 -
Redis持久化
Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的。所以,我们需要将内存中的数据持久化!典型的需要持久化数据的场景如下:将Redis作为数据库使用;将Redis作为缓存服务器使用,但是缓存miss后会对性能造成很大影响,所有缓存同时失效时会造成服务雪崩,无法响应。本文介绍Redis所支持的转载 2016-08-16 14:55:01 · 354 阅读 · 0 评论 -
Redis缓存集群及集群负载均衡方案设计
缓存模块设计采用分布式缓存: 说明: (1)Web服务器端只负责调用接口获取/更新数据,不必关心业务数据处理; (2)接口负责具体的数据处理,包括缓存数据的写入/更新; (3)缓存集群用于缓存服务器宕机后,数据仍然高可用。缓存写入规则用户访问业务数据时,查询缓存,如果没有值,则从数据库载入redis,并设置过期时间(基于时间过期的更新策略)。针对每一个模块,仅有一块内容的情况:存储k/转载 2016-09-01 19:01:16 · 3100 阅读 · 0 评论 -
Redis配置文件详细解析
# redis 配置文件示例# 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1转载 2016-09-22 23:56:00 · 677 阅读 · 0 评论 -
Redis和Memcache的区别分析
简单区别: 1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。 2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 3. Redis支持数据的备份,即master-slave模式的数据备份。 4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用原创 2015-09-21 20:27:25 · 18647 阅读 · 1 评论 -
Redis Info 命令详解
Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。 通过给定可选的参数 section ,可以让命令只返回某一部分的信息:server : 一般 Redis 服务器信息,包含以下域: redis_version : Redis 服务器版本redis_git_sha1 : Git SHA1redis_git_dirty : Git dir转载 2017-03-29 20:00:56 · 434 阅读 · 0 评论 -
Redis 主从复制功能
Redis 复制(Replication)1. 复制介绍分布式数据库为了获取更大的存储容量和更高的并发访问量,会将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上。Redis为了解决单点数据库问题,会把数据复制多个副本部署到其他节点上,通过复制,实现Redis的高可用性,实现对数据的冗余备份,保证数据和服务的高度可靠性。2. 复制的建立建立复制的配置方式有三种...转载 2018-07-05 10:09:03 · 918 阅读 · 0 评论 -
Redis数据过期策略
1、Redis中key的的过期时间 通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除127.0.0.1:6379转载 2016-03-02 17:45:25 · 525 阅读 · 0 评论