lru_cache装饰器

2024-06-22 14:04
文章标签 lru cache 装饰

本文主要是介绍lru_cache装饰器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LRU算法原理

  • LRU(Least Recently Used)算法是一种缓存淘汰策略。

  • 用于在有限的缓存空间中管理数据对象。

lru_cache用法

Python的缓存(lru_cache)是一种装饰在被执行的函数上,将其执行的结果缓存起来,当下次请求的时候,如果请求该函数的传参未变则直接返回缓存起来的结果而不再执行函数的一种缓存装饰器。

@functools.lru_cache(maxsize=None, typed=False)

参数maxsize:最大缓存次数,不指定传参默认值128。

参数typed:是否区分传参数据类型,默认fasle

lru_cache举例

import datetimefrom functools import lru_cache@lru_cachedef fibonacci(num):# 不使用缓存时,会重复执行函数return num if num < 2 else fibonacci(num - 1) + fibonacci(num - 2)start = datetime.datetime.now()print(fibonacci(40))end = datetime.datetime.now()print('执行时间', end - start)


lru_cache与redis对比

缓存方式

缓存位置

是否支持可变参数

是否支持分布式

是否支持过期时间设置

支持的数据结构

需单独安装

redis

缓存在redis管理的内存中

支持5种数据结构

lru_cache

缓存在应用进程的内存中,应用被关闭则被清空

字典(参数为:key,结果为:value)

这篇关于lru_cache装饰器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084491

相关文章

flask 中使用 装饰器

因为要完成毕业设计,我用到fountain code做数据恢复。 于是在github上下载了fountain code的python原代码。 github上的作者用flask做了fountain code的demo。 flask是面向python的一个网站框架。 里面有用到装饰器。 今天笔试的时候,我也被问到了python的装饰器。

Spring Cache常见问题解决

目录 一 报错:Null key returned for cache operation 二 报错:类型转换异常 三 取出的数据为null 一 报错:Null key returned for cache operation 这里报错有两种情况: 第一,如果你在新增的方法上使用Cacheable注解,那么肯定是会报这个错误的。 因为Cacheable注解的原理是先根据k

黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查

缓存菜品 后端服务都去查询数据库,对数据库访问压力增大。 解决方式:使用redis来缓存菜品,用内存比磁盘性能更高。 key :dish_分类id String key= “dish_” + categoryId; @RestController("userDishController")@RequestMapping("/user/dish")@Slf4j@Api(tags = "

LeetCode 算法:LRU 缓存 c++

原题链接🔗: 难度:中等⭐️⭐️ 题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key)如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, i

设计模式--装饰器模式

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地将行为添加到对象中,而无需通过子类进行静态扩展。装饰器模式通过创建一个包装类,也就是装饰器,来包裹原始的类,并且可以在包裹过程中添加一些额外的功能。 核心概念 装饰器模式的核心思想是通过组合而非继承来扩展对象的功能。它允许你在不改变原始类(被装饰者)结构的情况下,动态地添加功能。 结构 Component

Python函数式编程——高阶函数、返回函数、匿名函数、装饰器、偏函数

函数式编程     函数是Python内建支持的一种封装,通过把大段代码拆成函数,通过一层一层的函数调用,把复杂任务分解成简单的任务,这种分解称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。     函数式编程——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。     函数式编程是一种抽象程度很高的编程范式,纯粹的函

python装饰器小结

按照我自己的理解,python装饰器的作用就是让一些重复性的“操作”(代码)只出现一次就好,这样整个代码看起来会更清晰整洁,主要也减少了无谓的赋值粘贴。 例如,当前有两个方法get请求和post请求,在执行两个方法前,都要先检查一下请求的url是否符合要求,一般会这样写: # encoding=utf8import requestsclass Test():def __init__(self)

设计模式(java)- 装饰模式

1. 简介   装饰模式可以动态给一个对象扩展功能,并且它可以使客户灵活的组合自己所需要的功能,使用装饰器类装饰自己所以需要的功能。   一般的,我们需要给一个对象扩展功能时,会在该对象的类中新增方法或者直接继承该类。那么当新增的功能变多时,新增方法的方式会导致类大小膨胀,且不符合类的单一职责,在后续维护中会越来越麻烦。如果使用直接继承的方式,却会导致类的个数膨胀,且一个类只能负责一个功能,这样

LeetCode刷题之HOT100之LRU缓存

2024/6/21 酷暑难耐,离开空调我将不知道能否《活着》,昨天跑步感觉全身的热无法排出去,出门那种热浪一阵一阵打过来,一点风都舍不得给我。早早的来到实验室,也没多早,九点哈哈,做题啦! 1、题目描述 2、逻辑分析 刚看到这个题目,我看了好久,看不懂啥意思,然后去看了题解以及代码,打算跳过这题的想法在脑海里飘过三四次,好长啊代码。但是我还是看完了,就是一个redis缓存思想。该算法使用

java实现一个LRU缓存算法。

//LRU(Least Recently Used)缓存算法是一种常见的缓存淘汰策略,// 它的基本思想是保留最近被访问过的数据,淘汰最久未被访问的数据。下面是一个使用Java实现的简单LRU缓存算法:import java.util.LinkedHashMap;import java.util.Map;public class Test_A29<K,V> extends LinkedHa