![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 69
黑色核桃
这个作者很懒,什么都没留下…
展开
-
分布式锁实现
分布式锁 锁的本质是一个所有线程或进程都可以看见的共享变量,这个共享变量具有互斥性,当一个线程或进程拥有这个变量之后,其他线程或进程就只能阻塞,直到变量被释放,再重新去竞争。拥有了共享变量即获取了锁,只有获取锁之后才能执行互斥区中的代码。 对于单机应用来说,代表锁的共享变量只要存在于单机内存中即可保证所有的线程和进程可见。例如java synchronize实现中基于对象头中的mark字段,lock接口中是使用int值来存储锁状态的变更,使用cas来更新状态,并使用volatile来保证int值更新后的可见原创 2021-06-09 14:41:40 · 70 阅读 · 0 评论 -
LRU算法在redis和mysql中的不同应用
LRU算法用来做数据淘汰的算法,用来淘汰最近最少访问的数据;一般使用链表实现,当一个key被访问时,就将key放在链表头部,当需要淘汰数据时,就将链表末尾的数据淘汰。 redis中的应用 redis中淘汰数据有两个方式: 定期删除:redis有后台线程,会定时扫描数据,从中选择应该淘汰的过期数据将其删除。假如每次删除都对所有的key进行一次最近访问时间排序的话,对性能消耗非常大,redis采用的是随机抽样的方式进行删除,例如LRU算法删除,则随机抽取20个key,从中找出最近未访问的key进行删除。这样随原创 2021-06-09 14:36:39 · 215 阅读 · 0 评论 -
redis分片集群的哈希策略
redis的分片集群采用哈希的策略进行,由哈希值决定请求交予哪个具体的服务器处理。 假设有三台服务器,[0, 1, 2];使用哈希函数,例如取模,hash = key % 3;得到key的哈希值之后,将key发送到对应的服务器中处理。 由于key是完全无规律的,当其中一台服务器挂掉之后,hash变成hash = key%2;这样几乎所有key的哈希值都会改变,也就导致几乎所有key的缓存都失效了,造成缓存雪崩。 根本原因就是因为一个服务器宕机之后,哈希函数发生了变化(由之前的key%3变成了key%2),所原创 2021-05-07 16:20:27 · 413 阅读 · 0 评论 -
redis的底层数据结构
redis的底层数据结构 redis支持的数据类型有五种,字符串、列表、集合、哈希、有序集合。其中用于实现的底层数据结构有六种,简单动态字符串、整数数组、哈希表、双向链表、跳表、压缩列表。 简单动态字符串 简单动态字符串,底层使用char数组保存数据,但是会进行预分配,提前分配较大的空间,避免字符增加时每次都需要扩容,但是会占用额外空间。同时使用变量记录字符串已使用的长度,可以在O(1)时间复杂度内获取字符串的长度。 整数数组 整数数组作为集合的一种实现形式,它主要以有序、无重复的方式存储数字。底层存储的数原创 2021-03-26 17:02:53 · 71 阅读 · 0 评论