问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

django from django_redis import get_redis_connection后如何为该redis添加分布式锁呢?

发布网友 发布时间:2022-04-11 13:57

我来回答

2个回答

懂视网 时间:2022-04-11 18:18

自定义连接池

这种方式跟普通py文件操作redis一样,代码如下

views.py

 import redis
 from django.shortcuts import render,HttpResponse
 from utils.redis_pool import POOL
 
 def index(request):
 conn = redis.Redis(connection_pool=POOL)
 conn.hset('kkk','age',18)
 
 return HttpResponse('设置成功')
 def order(request):
 conn = redis.Redis(connection_pool=POOL)
 conn.hget('kkk','age')
 
 return HttpResponse('获取成功')

通过第三方组件操作redis

安装

pip3 install django-redis

配置:

settings.py

# redis配置
CACHES = {
 "default": {
 "BACKEND": "django_redis.cache.RedisCache",
 "LOCATION": "redis://127.0.0.1:6379",
 "OPTIONS": {
  "CLIENT_CLASS": "django_redis.client.DefaultClient",
  "CONNECTION_POOL_KWARGS": {"max_connections": 100}
  # "PASSWORD": "密码",
 }
 }
}

使用:

views.py

import redis
from django.shortcuts import render,HttpResponse
from django_redis import get_redis_connection
 
 
def index(request):
 conn = get_redis_connection("default")
 return HttpResponse('设置成功')
def order(request):
 conn = get_redis_connection("default")
 return HttpResponse('获取成功')
from rest_framework.views import APIView
from rest_framework.response import Response
 
from django.core.cache import cache
 
class OrderView(APIView):
 def get(self,request,*args,**kwargs):
 # conn = get_redis_connection('default')
 cache.set('a','b')
 print(cache.get('a'))
 return Response('..')

全站缓存

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,
当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存

MIDDLEWARE = [
 'django.middleware.cache.UpdateCacheMiddleware',
 # 其他中间件...
 'django.middleware.cache.FetchFromCacheMiddleware',
 ]

一个放在最上面,一个放在最下面

views.py

from django.shortcuts import render,HttpResponse
import time
 
 
def index(request):
 ctime = str(time.time())
 return HttpResponse(ctime)
 
def order(request):
 ctime = str(time.time())
 return HttpResponse(ctime)

配置了全站缓存,在不同的时间(一定范围内),上面两个视图返回的时间是一样的,都是缓存时的时间

单独视图缓存

方式一:通过装饰器

from django.views.decorators.cache import cache_page
 
 @cache_page(60 * 15)
 def my_view(request):
  ...

方式二:通过url

from django.views.decorators.cache import cache_page
 
 urlpatterns = [
  url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
 ]

局部页面缓存

1. 引入TemplateTag

{% load cache %}

2. 使用缓存

{% cache 5000 缓存的key %}
 缓存内容
{% endcache %}

更多redis知识请关注redis入门教程栏目。

热心网友 时间:2022-04-11 15:26

有效的,不过如果使用redis,他内部是单线程实现,大部分操作不加锁,也不会有并发问题,是安全的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
豆瓣酱放多了怎么补救 鑫创sssbd量产工具 为了了解某校1500名学生的体质状况,随机调查了这个学校内一定数量学生... 564÷85的竖式如何列? 上海房屋过户 要准备什么资料 个人卖房要提供哪些资料 房屋交易资料需要哪些 房子买卖要哪些资料 房产交易需要什么资料 ...让重锤自由下落,打出的一条纸带如图所示,图中 django-redis 支持哪些命令 哪里有基于redis的订阅发布实现的网页聊天室或网页推送系统 java聊天室用redis数据库怎么做 redis做聊天系统可靠吗 redis是否收费 redis什么时候可以搭 怎样将bitmap添加到mysql数据库中 怎么统计redis的hash中的某个字段个数,在线等 redis的setbit这个bit怎么理解,配合bitcount使用 redis安装环境,Linux是redis的最好安装环境,很多人都建议把它按哪里, 微信的摇一摇功能里面可以利用打招呼这个功能进行多次聊天吗? 用微信摇一摇功能摇出来的好友可以看到我的微信中个人信息吗? 用微信摇一摇的时候 摇一下以后 就一直是 正在搜索同一时刻摇晃手机的人 一直没反映是怎么回事 php可以实现微信摇一摇的功能吗 怎么样才能实现微信自动摇一摇 redis过期时间设置 redis 从服务器无法启动 怎样改回主服务 C:\>Redis\redis>redis-server.exe redis.windows.conf 拒绝访问. redis创建报错怎么办? linux将redis的redis.conf中的daemonize配置为yes但还是前台启动 django redis 多少用户访问 php 加单引号后 就报MYSQL错误! 求解! mysql 插入 单引号'mysql 插入单引号'会出错,如Jim's mysql单引号和双引号的区别 mysql 的单引号和双引号有什么区别吗 求教mysql中单引号和双引号的区别! mysql为什么大双引号标红? mysql,怎么根据一个时间段,然后查询出这个时间段的全部时间?? 图形界面的linux怎么安装redis redis桌面管理工具 怎么启动 至于为什么不使用redis的muti,expire,watch等机制 redis 基础内核参数优化有哪些 django mysql 中文乱码怎么办 为什么Struts2使用Filter处理请求就是体现了面向切面编程的思想 去哪儿网Redis运维实践 运维工程师在工作中对于redis需要进行哪些操作 怎样知道有redis未授权访问 redis未授权访问漏洞怎么排查 redis 未授权访问漏洞windows也有吗 怎么让外网访问redis缓存服务,现在只能被127.0.0.1访问