redis 缓存 雪崩
Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。
数据在内存中,读写速度非常快;
丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)。
支持数据持久化。
可以将内存中数据保存在磁盘中,重启时加载。
可以作为消息中间件使用,支持发布订阅。
https://baijiahao.baidu.com/s?id=1660009541007805174&wfr=spider&for=pc
redis缓存
缓存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OkvcE5n9-1586424450179)(/Volumes/BANQ/千锋python/python——基础知识:django:flask/django/PHOTO/86FD2E7D-C7AB-46B9-AE4E-0D3D46E8D9D6.png)]
提升服务响应速度
将执行过高的操作数据存储下来,在一定时间内,再次获取数据的时候,直接从缓存中获取
比较理想的方案,缓存使用内存级缓存
##djangocache:内置缓存框架
创建缓存表 :python manage.py createcachetable '缓存的表明'
#注册缓存 CACHE = { 'default':{ 'BACKEND':'django.core.cache.backends.db.DatabaseCache',#缓存底层 'LOCATION':'',#缓存位置 'TIMEOUT':'',#缓存时间 'OPTIONS':{ MAX_ENTRIES:'',#最大缓存量 }, 'KEY_PREFIX':'',#前置字符串 'VERSION':'', } }
方法一:装饰器来实现
#缓存的使用 ''' @cache_page(time,cache,key_prefix) 上面的参数不用和默认里面的重复再写,只要一个地方写就OK time 缓存时间 cache 缓存默认配置,也就是idefault中的东西 key_prefix 前置字符串 ''' @cache_page() def news(request): news_list = [] for i in range(10): news_list.append('冠状病毒很可怕%d'%i) data = { 'new_list': news_list, } response = render(request, 'news.html', context=data) return response
方法二:自己写缓存
def news(request): result = cache.get('news') if result: return HttpResponse'news' news_list = [] for i in range(10): news_list.append('冠状病毒很可怕%d'%i) data = { 'new_list': news_list, } response = render(request, 'news.html', context=data) cache.set('news',response.content,timeout= 5*60) return response
##使用redis做缓存
官方中文文档:https://django-redis-chs.readthedocs.io/zh_CN/latest/
下载
pip install django.redis pip install django.redis-cache
###配置
CACHE = { 'default':{ 'BACKEND':'django_redis.cache.RedisCache',#缓存底层 'LOCATION':'redis://127.0.0.1:6379/1',#缓存位置 'OPTIONS':{ 'CLIENT_CLASS':'django_redis.client.DefaultClient',#客户端类 }, } }
#终端启动redis服务 redis-server
@cache_page() def news(request): news_list = [] for i in range(10): news_list.append('冠状病毒很可怕%d'%i) data = { 'new_list': news_list, } response = render(request, 'news.html', context=data) return response
redis雪崩
缓存中的东西一瞬间大范围消失,导致巨大的访问量负载道数据库中,导致数据库负载过多,程序崩溃,然后重新启动数据库,还是会出现相同问题。
怎么解决雪崩
将缓存数据🍒时间随机设置。避免同一时间数据大范围消失