redis缓存dict-红色的缓存dict的实现 (redis缓存雪崩 缓存穿透 缓存击穿)

教程大全 2025-07-15 21:30:46 浏览

红色的缓存:dict的实现

在Python领域中,我们经常会听到缓存的概念。缓存是指将一些经过计算的结果保存在内存中,以便在下次需要同样结果时可以更为快速地获取,从而提高程序的效率。

在Python中,最常用的缓存数据结构之一就是dict(字典)。在这里,我们将介绍如何使用dict来实现一个红色的缓存(LRU Cache),以便更好地管理内存。

红色的缓存是指当缓存达到最大容量时,会将最近最少使用(Least Recently Used)的缓存数据删除,从而保持缓存空间的利用率。我们可以通过dict和双向链表来实现红色的缓存。具体实现分以下步骤:

1. 创建一个类LRU_Cache,该类包含两个属性:dict缓存和双向链表。

class Node:

def __init__(self, key=None, value=None):

self.key = key

self.value = value

self.prev = None

self.next = None

class LRU_Cache:

def __init__(self, capacity):

self.capacity = capacity

self.hash_map = {}

self.head = Node(None, None)

self.tl = Node(None, None)

self.head.next = self.tl

self.tl.prev = self.head

self.count = 0

2. 创建两个辅助方法:add_node和delete_node。add_node是将一个节点插入到双向链表的头部,delete_node是将一个节点从双向链表中删除。```pythondef add_node(self, node):node.prev = self.headnode.next = self.head.nextself.head.next.prev = nodeself.head.next = nodedef delete_node(self, node):node.prev.next = node.nextnode.next.prev = node.prev

3. 当从缓存中获取数据时,我们需要更新双向链表的顺序,以便将该节点移至链表的头部。然后,返回查询到的值。

def get(self, key):

if key in self.hash_map:

node = self.hash_map[key]

缓存穿透

self.delete_node(node)

self.add_node(node)

return node.value

4. 当向缓存中添加数据时,我们同样需要更新双向链表。如果缓存已满,则需要将最近最少使用的节点从缓存中删除。```pythondef put(self, key, value):if key in self.hash_map:node = self.hash_map[key]node.value = valueself.delete_node(node)self.add_node(node)else:if self.count == self.capacity:node = self.tl.prevself.delete_node(node)del self.hash_map[node.key]self.count -= 1node = Node(key, value)self.add_node(node)self.hash_map[key] = nodeself.count += 1

我们可以通过以下代码测试我们的LRU_Cache类:

cache = LRU_Cache(2)

cache.put(1, 1)

cache.put(2, 2)

print(cache.get(1)) # 1

cache.put(3, 3)

print(cache.get(2)) # -1

cache.put(4, 4)

print(cache.get(1)) # -1

print(cache.get(3)) # 3

print(cache.get(4)) # 4

这段测试代码将缓存的最大容量设为2。我们向缓存中添加两个节点1和2。然后,我们从缓存中查询节点1,得到返回值1。接着,我们向缓存中添加节点3,并且此时容量已经达到最大值2,因此我们需要将最近最少使用的节点2从缓存中删除。接下来,我们查询节点2,得到返回值-1。接着,我们查询节点1,得到返回值-1,因为节点1已经被删除了。我们查询节点3和节点4,分别得到返回值3和4。在实际的应用程序中,缓存可以大大提高程序的效率,同时还可以减少计算机的资源使用率。使用dict和双向链表可以方便地实现缓存,以便更好地管理内存和提高程序的性能。

香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。


redis集合和有序集合的区别

如果是使用的del命令.是会释放内存的.c//....187 void delCommand(redisClient *c)//....191 if (dbDelete(c- > db,c- > argv[j])) {//....131 int dbDelete(redisDb *db, robj *key) {//...140 return dictDelete(db- > dict,key- > ptr) == DICT_OK;

scrapy使用redis的时候,redis需要进行一些设置吗

1.使用两台机器,一台是win10,一台是centos7,分别在两台机器上部署scrapy来进行分布式抓取一个网站7的ip地址为192.168.1.112,用来作为redis的master端,win10的机器作为的爬虫运行时会把提取到的url封装成request放到redis中的数据库:“dmoz:requests”,并且从该数据库中提取request后下载网页,再把网页的内容存放到redis的另一个数据库中“dmoz:items”从master的redis中取出待抓取的request,下载完网页之后就把网页的内容发送回master的redis5.重复上面的3和4,直到master的redis中的“dmoz:requests”数据库为空,再把master的redis中的“dmoz:items”数据库写入到mongodb中里的reids还有一个数据“dmoz:dupefilter”是用来存储抓取过的url的指纹(使用哈希函数将url运算后的结果),是防止重复抓取的!

输入法不见了,怎样找到,语言栏设置是灰色的?

如果第1项语言栏为灰色,先进行第2项设置,第1项就可以设置了)。 任务栏系统托盘区的输入法图标不见了,点击运行输入 回车即可。 任务栏没有了输入法,解决方法: 1、打开控制面板/日期、时间、语言和区域设置/区域和语言选项/语言/详细信息/语言栏,在其中勾选“在任务栏中显示其它语言栏图标”然后按确定和应用(如果第1项语言栏为灰色,先进行第2项设置,第1项就可以设置了)。 2、如果故障依旧:打开控制面板/日期、时间、语言和区域设置/区域和语言选项/语言/详细信息/高级/在打开的对话框中,将“关闭高级文字服务”前的勾去掉,然后按应用和确定。 3、如果故障依旧,运行输入regedit打开注册表定位,[HKEY_CURRENT_USER\Software\Microsoft\windows\CurrentVersion\Run]在右窗格点击鼠标右键,选择新建一个字符串值,在名称里面输入回车,双击在数值数据中输入C:\Windows\System32\回车,重启电脑即可。 4、如果故障依旧,建议你用系统自带的系统还原,还原到你没有发生这次故障的时候进行修复。 5、如果故障依旧,用系统安装盘修复系统。 运行输入CMD回车打开命令提示符输入SFC /SCANNOW按回车键(SFC和/有一个空格),插入系统安装盘,系统会自动将硬盘中的系统文件与系统盘中的文件比较并进行修复。 如果输入法只能输入英文或指定语言。 开始运行输入回车打开组策略,在左侧选用户配置/管理模板/控制面板/区域和语言选项/在右侧选“限制Windows菜单和对话框语言的选项”双击它,在打开的对话框中选择“未配置”然后按应用确定,重启电脑即可。 语言栏不能正常切换 可能是你的操作时间稍长,缓存已满,会造成语言栏不能正常切换、右键无反应、文件夹内容出现错乱等等故障,一般通过重启就可解决问题。 出现这种现象的原因还有: 1、使用QQ这个软件与系统不兼容引起的,卸载,在重新下载安装。 2、打开程序太多互相干扰,关闭一切程序(不要打开过多的网页),包括杀毒软件的监控,不要幕后杀毒。 3、操作一会缓存已满(包括打开网页过多),也会出现各种奇怪的故障,一般重启即可恢复。 出现这种故障,可能是注册表受损造成的,解决办法如下: 1、开机按F8进入安全模式后在退出,在进入正常模式(修复注册表)。 2、如果故障依旧,请你用系统自带的系统还原,还原到你没有出现这次故障的时候修复(如果正常模式恢复失败,请开机按F8进入到安全模式中使用系统还原)。 3、如果故障依旧,使用系统盘修复,打开命令提示符输入SFC /SCANNOW 回车(SFC和/之间有一个空格),插入原装系统盘修复系统,系统会自动对比修复的。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐