首页 > 其他分享 >django自带的cache缓存框架使用

django自带的cache缓存框架使用

时间:2023-08-29 19:44:23浏览次数:78  
标签:None 缓存 version cache django set key

https://docs.djangoproject.com/zh-hans/4.2/topics/cache/#top

主要步骤官网也写得很清楚了,包含怎么区使用。

这里就展示一些配置django-redis来使用

# settings.py
CACHES = {
    'default': {  # 默认,预留
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://192.168.2.6:6380/0',  # 0是表示使用第1个库,redis默认一共16个库(0-15),记得不。。
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    },
    ...
}

操作缓存

https://docs.djangoproject.com/zh-hans/4.2/topics/cache/#the-low-level-cache-api

from django.core.cache import cache, caches

cache 等同于 caches['default']
如果你配置其他名字的caches,则使用caches['你配置的名字']来获取缓存后端实例

# 返回的类型就是你在settings.py中设置的BACKEND,比如这里肯定是django_redis.cache.RedisCache
print(type(caches['default']))
#cc: RedisCache = caches

cache.set(key, value, timeout=DEFAULT_TIMEOUT, version=None)

添加缓存。

key 是一个字符串,value 可以任何 picklable 形式的 Python 对象。【value会pickle之后以string存储。(redis)】

timeout 参数是可选的,默认为 CACHES 中相应后端的 timeout 参数。它是值存在缓存里的秒数。timeout 设置为 None 时将永久缓存。

timeout 为0将不缓存值。

>>> cache.set('shengfen', 'hello, world!', 30)

我们查看redis,会发现如下:

我们发现key的名字是:1:你保存的key名,什么含义呢?

实际上存储的格式是:<缓存key前缀>:<version版本>:<你保存的key名>

**缓存key前缀:**通过settings.py中添加KEY_PREFIX来控制,主要作用是防止和系统中其他用到相同cache时候key会冲突。

**version版本:**看官网吧→[https://docs.djangoproject.com/zh-hans/4.2/topics/cache/#cache-versioning](https://docs.djangoproject.com/zh-hans/4.2/topics/cache/#cache-versioning)

cache.get(key, default=None, version=None)

获取缓存,如果缓存中不存在该对象, cache.get() 返回 None

>>> cache.get('my_key')
'hello, world!'

cache.add(key, value, timeout=DEFAULT_TIMEOUT, version=None)

add和set类型,不同点是add只在key不存在的时候才进行添加。

cache.get_or_set(key, default, timeout=DEFAULT_TIMEOUT, version=None)

get不到就直接set,没啥需要特别解释的。

cache.get_many(keys, version=None)

一次性获取多个key,并返回一个字典。

>>> cache.set("a", 1)
>>> cache.set("b", 2)
>>> cache.set("c", 3)
>>> cache.get_many(["a", "b", "c"])
{'a': 1, 'b': 2, 'c': 3}

cache.set_many(dict, timeout)

一次性设置多个key-val,传递一个dict。

>>> cache.set_many({"a": 1, "b": 2, "c": 3})
>>> cache.get_many(["a", "b", "c"])
{'a': 1, 'b': 2, 'c': 3}

cache.delete(key, version=None)

删除指定的key

cache.clear()

删除所有缓存

cache.touch(key, timeout=DEFAULT_TIMEOUT, version=None)

设置key的过期时间。如果键被成功 touch(),将返回 True,否则返回 False

cache.incr(key, delta=1, version=None) cache.decr(key, delta=1, version=None)

自增或者自减。

>>> cache.set("num", 1)
>>> cache.incr("num")
2
>>> cache.incr("num", 10)
12
>>> cache.decr("num")
11
>>> cache.decr("num", 5)
6

标签:None,缓存,version,cache,django,set,key
From: https://www.cnblogs.com/juelian/p/17665705.html

相关文章

  • Mybatis Plus报错: can not find lambda cache...
    使用mybatisplus时使用Lambda表达式做查询条件会遇到mybatis拿不到缓存问题:错误1:com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:cannotfindlambdacacheforthisentity错误2:cannotfindlambdacacheforthisproperty[XXX]ofentity[com.XXX.X......
  • Django CMS搭建--1.虚拟环境搭建
    客户端环境:windows101.virtualenv使用virtualenv是Python中的一个包,用于创建和管理虚拟环境,可以在不同的项目中使用不同的Python版本和第三方库,避免了全局环境和项目之间的冲突。1.1命令行cmd安装:pipinstallvirtualenv1.2创建虚拟环境myvenv,激活后,你会看到命令行前......
  • RESTful API规范,序列化,Django Rest_Framework
    一.RESTfulAPI规范REST全称是RepresentationalStateTransfer,中文意思是表述(编者注:通常译为表征性状态转移)。它首次出现在2000年RoyFielding的博士论文中。RESTful是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中。这种风格的理念认为后端开发任......
  • redis缓存优化
    目录一缓存优化1.1缓存更新策略1.2配置文件中设置二穿透,击穿,雪崩2.1缓存穿透2.2缓存击穿2.3缓存雪崩一缓存优化1.1缓存更新策略#redis数据放在内存中,输入如果满了,再放数据--->肯定能放进去 -老数据怎么样?#方案LRU-LeastRecentlyUsed没有被使用时间最长的......
  • Linux中Cache内存占用过高解决办法
    https://zhuanlan.zhihu.com/p/200833204一、概述在日常运维中,我们会发现主机内存使用告警,为什么Linux系统没运行多少程序,显示的可用内存这么少?其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做CacheMemory。有时候你会发现没有什么程序在运行,但是使用top......
  • RISCV-MINI cache小记
    该cache映射策略为直接映射,采用写回(writeback)方式。需要注意的细节在于cpu-cache通过mask信号判断访存是读还是写,显然mask全0时为读。下图FSM中省略了dirty会影响状态转移,比如WriteCache到WriteBack,当cache块为dirty时才会触发aw.fire(io.nasti.aw.valid:=is_dirty)。简单解释:......
  • Linux 中的内存(cache,buffer,)
    在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。内存查看当我们使用free-h命令时,会显示如下的信息t......
  • Redis 缓存满了怎么办?
    Redis缓存使用内存来保存数据,随着需要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。此时,应该怎么办?本篇文章接下来就来聊聊缓存满了之后的数据淘汰机制。值得注意的是,在Redis中 过期策略和内存淘汰策略是两个完全不同的概念。Redis过期策略指的是Redis使用......
  • 接口查询性能优化-缓存
    查询性能优化缓存种类mybatis一级缓存mybatis二级缓存本地缓存各个节点的数据不同步分布式缓存redis前端h5的缓存本地缓存session缓存mybatis一级缓存一个方法中对同一个sql,查询了多次当在这个方法上加@transactional后续的查......
  • django(cookie与session、中间件、auth模块)
    一cookie与session1发展史及简介"""发展史1.网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的eg:新闻、博客、文章2.出现了一些需要保存用户信息的网站eg:淘宝、支付宝、京东解决每次访问网站都需要重复的输入......