Redis
文章平均质量分 93
Aries_Ro
go go go! That's my utopia!
展开
-
Redis跳表
Redis 中的有序集合(Sorted Set)是用跳表(Skip list)来实现的。这里就需要了解一下跳表的概念。:链表插入,删除某一个节点的时间复杂度是O(1),但是查询的时间复杂度是O(n)。跳表就是解决链表在有序节点场景下的查询时间复杂度高问题。时间复杂度能达到O(logn)。原创 2023-07-02 15:59:14 · 399 阅读 · 0 评论 -
Redis(三)存储原理与数据模型(hash冲突、渐进式rehash)
在 redis 实例中假如形成了很大的对象,比如一个很大的 hash 或很大的 zset,这样的对象在扩容的时候,会一次性申请更大的一块内存,这会导致卡顿;但是rehash时,将hash表1的数据复制到hash表2是一个庞大的工程,可能会造成redis线程阻塞,影响redis性能。时间复杂度能达到O(logn)。Redis是key-value的结构,其中value包含:字典,双向链表,压缩列表,跳表,整数数组,动态字符串。其中redis中各value的数据结构根据不同的情况有不同的自动存储转换。原创 2023-07-16 19:38:50 · 1120 阅读 · 0 评论 -
Redis(二)网络协议和异步方式(乐观锁&悲观锁、事务)
监控机制触发:所有对数据库进行修改的命令,如SET、LPUSH、SADD、ZREM、DEL、FLUSHDB等,在执行之后都会调用multi.c/touchWatchKey函数对watched_keys字典进行检查,查看是否有客户端正在监视刚刚被命令修改过的key,有的话touchWatchKey函数会将监视的客户端的REDIS_DIRTY_CAS标识打开,表示该客户端事物安全性已经被破坏。lua脚本具备原子性;乐观锁在执行时,不会将数据锁住,其他客户端可以修改数据,当数据被修改了,本地就不更新,返回失败。原创 2023-07-16 19:38:32 · 715 阅读 · 0 评论 -
Redis(一)原理及基本命令(柔性数组)
Redis 是 Remote Dictionary Service 的简称,被称为远程字典服务;redis客户端和服务端是基于TCP建立网络通信的。Redis 是内存数据库(保存在内存而不是磁盘),是目前市面上高性能的key-value数据库;底层的数据结构就是hash,因此查找数据的复杂度为O(1);Redis属于非关系型数据库,用键值来存储。类似于哈希表数据结构。和MySQL这类关系型数据库是不一样的。参考MySQL(一)基本架构、SQL语句操作、试图redis中的字符串是一种动态字符串。原创 2023-07-16 19:34:49 · 839 阅读 · 0 评论