redis 缓存 雪崩

Redis是一个高性能的键值对内存数据库,常用于数据库、缓存和消息中间件。文章探讨了Redis缓存雪崩问题,即大量缓存在同一时间失效,导致数据库负载过大,甚至可能导致服务崩溃。为解决这一问题,提出了缓存樱桃时间随机设置的方法,以避免同一时间数据大范围消失。
摘要由CSDN通过智能技术生成

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雪崩

缓存中的东西一瞬间大范围消失,导致巨大的访问量负载道数据库中,导致数据库负载过多,程序崩溃,然后重新启动数据库,还是会出现相同问题。

怎么解决雪崩

将缓存数据🍒时间随机设置。避免同一时间数据大范围消失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值