c
nlnl_xjh
无敌超级帅
展开
-
Redis---ACID
Redis—ACIDA 原子性redis能够提供部分原子性MULTI 开启事务命令 1命令 2EXEC直到服务器收到EXEC命令才真正执行命令,此前命令1、2都被暂时存放在队列1:如果命令1或2发送到服务器 就检测出命令异常 那么所有命令都不会执行 保证了原子性2:接受命令时没有检查出错误 具体执行时发现错误 此时正常执行的命令还是能成功执行 此时出现了同一事务部分操作成功 部分失败 没有保证原子性3:执行事务时实例宕机,那么重启时 实例会保存部分事务操作 如果开启了AOF日志 则可以原创 2021-08-05 22:14:56 · 145 阅读 · 0 评论 -
Redis---并发访问控制
Redis—并发访问控制假如有这么一个场景,redis缓存了一个购物网站的商品库存,同时有两个用户对A商品下单购买了,分别都从redis读取了库存量,然后减一,又分别存回了数据库,此时商品库存应该减2,但是只减少了 1。对此,多个客户端并发访问redis时,需要进行一定的访问控制不需要加锁实现并发访问控制1:像是简单的数值加减操作,可以调用redis提供的一些原子操作INCR/DECR进行增值减值操作2:将多个不是原子操作的的操作合并在一起中写入LUA脚本执行,redis能保证lua脚本执行时是原原创 2021-08-05 21:50:46 · 1252 阅读 · 0 评论 -
Redis--缓存淘汰之LRU和LFU
Redis–缓存淘汰之LRU和LFULRULeast Recently Used 最近最少使用 强调时效性像是一个链表,元素再次被访问或者刚刚插入链表都会放入头部,当需要淘汰时,则先从尾部开始淘汰。越靠前面的是越最近被访问的 越靠后面是越久未被访问的由于LRU算法需要维护一个包含所有元素的链表,且每次数据被访问都要移动元素的位置,如果有大量数据被访问 就会有大量的数据需要在链表内移动对于redis来说 额外的性能开销太大 redis希望尽可能更少的占用内存 尽可能快所以redis对LRU进行了原创 2021-08-03 22:44:34 · 261 阅读 · 0 评论 -
Redis--主从数据同步
1:从库刚刚加入,这是需要执行一次全量复制,首先需要与主库进行协商,向主库发送psync ? -1 命令,主库收到命令后回复 FULLPSYNC {自己的id} {自己的偏移量}然后开始执行BGSAVE命令 保存当前数据库状态 生成RDB文件 并传输给从库从库收到文件后 首先清空自身的数据库 然后加载RDB文件由于在此过程中 主库还是可以接收到用户的写请求 主库会暂时将这些命令记录到replaciton buufer 最后发送到从库 从库再重新执行这些命令 保持与主库数据一致性2:全量复制完毕之后原创 2021-08-03 21:50:42 · 125 阅读 · 0 评论 -
Redis内部数据结构----压缩列表
Redis内部数据结构----压缩列表一:内存模型结合源码来看比较清晰首先是一个压缩列表的辅助性元素,除存储元素之外额外共需要十一个字节,分别能够帮助我们知道压缩列表总共占用了多少个字节,压缩列表元素个数,快速定位到最后一个元素,以及压缩列表结束的位置。// 返回占用的总字节数#define ZIPLIST_BYTES(zl) (*((uint32_t*)(zl)))// 返回到最后一个元素的偏移量#define ZIPLIST_TAIL_OFFSET(zl) (*((uint3原创 2021-07-29 21:29:23 · 147 阅读 · 0 评论 -
Linux 系统上调试Redis
Linux 系统上调试Redis1:在电脑上安装ubuntu系统,可以通过虚拟机,当然你有先成的服务器也是很方便。2:在ubuntu系统上安装Clion,官网上有对应的版本,直接下载个三十天的试用的就行3: 打开Clion,进入https://github.com/vawoftd/redis-5.0.8 拉取源码到本地4:调试过程中出现了两个错误 一是缺失release.h这个文件 找一个已经编译好的linux版的Redis 在src文件下会有这个文件 移动到第三步拉取到源码的src目录下二是&原创 2021-07-21 22:35:37 · 228 阅读 · 0 评论