缓存
Masonite 提供了一个强大的缓存功能,可以缓存任何在每次请求时获取可能不必要或昂贵的数据代价。 Masonite 缓存允许你保存和获取数据、设置过期时间和管理不同的缓存存储。
Masonite 支持以下缓存驱动程序:Redis、Memcached 和基本的 文件 驱动。
配置
缓存配置位于 config/cache.py
文件中。在此文件中,你可以通过 STORES
字典指定不同的缓存存储,并使用 default
键在应用程序中使用默认值。
Masonite 默认配置为使用文件缓存驱动程序,名为 local
。
config/cache.py
STORES = {
"default": "local",
"local": {
"driver": "file",
"location": "storage/framework/cache"
},
"redis": {
"driver": "redis",
"host": "127.0.0.1",
"port": "6379",
"password": "",
"name": "masonite4",
},
# ...
}
提示:对于生产应用程序,建议使用更高效的驱动程序,例如
Memcached
或Redis
。
文件缓存
文件缓存驱动程序通过将数据保存在服务器的文件系统上来存储数据。它可以在没有第三方服务的情况下按原样使用。
Masonite 存储缓存数据文件的位置默认为项目根目录中的 storage/framework/cache
,但可以使用 location
参数进行更改。
Redis
Redis 缓存驱动程序需要 redis
python 包,你可以安装它:
pip install redis
然后你应该将 Redis 定义为默认存储并使用你的 Redis 服务器参数对其进行配置:
STORES = {
"default": "redis",
"redis": {
"driver": "redis",
"host": env("REDIS_HOST", "127.0.0.1"),
"port": env("REDIS_PORT", "6379"),
"password": env("REDIS_PASSWORD"),
"name": env("REDIS_PREFIX", "project name"),
},
}
最后确保 Redis 服务器正在运行并且你已准备好 开始使用缓存。
Memcached
Memcached 缓存驱动程序需要 pymemcache
python 包,你可以安装它:
pip install pymemcache
然后你应该将 Memcached 定义为默认存储并使用你的 Memcached 服务器参数对其进行配置:
STORES = {
"default": "memcache",
"memcache": {
"driver": "memcache",
"host": env("MEMCACHED_HOST", "127.0.0.1"),
"port": env("MEMCACHED_PORT", "11211"),
"password": env("MEMCACHED_PASSWORD"),
"name": env("MEMCACHED_PREFIX", "project name"),
},
}
最后确保 Memcached 服务器正在运行并且你已准备好开始使用缓存。
使用缓存
你可以通过 Cache
外观访问缓存服务,也可以通过 服务容器 解析它。
存储数据
有两种方法可用:add
和 put
。
add
你可以使用add
方法轻松添加缓存数据。这将获取已经在缓存中的数据,如果它没有过期,或者它会插入新的值。
from masonite.cache import Cache
def store(self, cache: Cache):
data = cache.add('age', '21')
如果 age
键存在于缓存中且未过期,则将「21」添加到缓存中并返回。如果 age
键不存在或未过期,则它将返回缓存中该键的任何数据。
put
put
方法会将数据放入缓存中,无论它是否已经存在。这是覆盖缓存中数据的好方法:
cache.put('age', '21')
你可以指定缓存应该有效的秒数。不要指定任何时间或指定 None
以永久保留数据。
cache.put('age', '21', seconds=300) # 保存 5 分钟
You may also cache lists and dictionaries which will preserve the data types:
cache.put('user', {"name": "Joe"}, seconds=300) # 保存 5 分钟
cache.get("user")['name'] #== "Joe"
获取数据
你可以从缓存中获取缓存数据。如果数据过期,那么这将返回 None
或你指定的默认值:
cache.get('age', '40')
这将从缓存中获取正确的年龄数据或返回默认值「40」。
检查数据是否存在
你还可以查看缓存中是否存在值(并且未过期):
cache.has('age')
删除数据
如果你想删除缓存中的某个项目,你可以:
cache.forget('age')
这将从缓存中删除该项目。
递增/递减值
如果它是一个整数,你可以递增和递减一个值:
cache.get('age') #== 21
cache.increment('age') #== 22
cache.decrement('age') #== 21
Remembering
Remembering 是使用可调用将某些内容保存到缓存的好方法:
from app.models import User
cache.remember("total_users", lambda cache: (
cache.put("total_users", User.all().count(), 300)
))
刷新缓存
要删除缓存中的所有内容,你只需刷新它:
cache.flush()
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。