redis管道、django中集成redis

redis管道

redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

import redis

pool = redis.ConnectionPool(host='127.0.0.1', port=6379)

r = redis.Redis(connection_pool=pool)

# pipe = r.pipeline(transaction=False)
pipe = r.pipeline(transaction=True)
pipe.multi()
pipe.set('name', 'alex')
pipe.set('role', 'sb')

pipe.execute()
# mysql事务:四大特性   事务的隔离级别  mysql5.7 默认的隔离级别是什么
    可重复读
# redis:redis数据库,是否支持事务?
    -支持
    -不支持
# redis事务机制可以保证一致性和隔离性,无法保证持久性,但是对于redis而言,本身是内存数据库,所以持久化不是必须属性。原子性需要自己进行检查,尽可能保证


# redis 不像mysql一样,支持强事务,事务的四大特性不能全部满足,但是能满足一部分,通过redis的管道实现的

# redis本身不支持事务,但是可以通过管道,实现部分事务

# redis 通过管道,来保证命令要么都成功,要么都失败,完成事务的一致性,但是管道只能用在单实例,集群环境中,不支持pipline

django中集成redis

方式一:直接使用

from user.POOL import pool
import redis
def index(request):
    conn = redis.Redis(connection_pool=pool)
    conn.incr('page_view')
    res = conn.get('page_view')
    return HttpResponse('被你看了%s次' % res)

方式二:使用第三方模块:django-redis

-下载
-配置文件配置
        CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/0",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "CONNECTION_POOL_KWARGS": {"max_connections": 100}
                # "PASSWORD": "123",
            }
        }
    }
使用
    from django_redis import get_redis_connection
    def index(request):
        conn = get_redis_connection(alias="default") # 每次从池中取一个链接
        conn.incr('page_view')
        res = conn.get('page_view')
        return HttpResponse('被你看了%s次' % res)

方式三:借助于django的缓存使用redis

如果配置文件中配置了 CACHES  ,以后django的缓存,数据直接放在redis中

以后直接使用cache.set 设置值,可以传过期时间

使用cache.get 获取值

强大之处在于,可以直接缓存任意的python对象,底层使用pickle实现的
posted @ 2022-11-15 20:38  小张不爱吃泡面  阅读(70)  评论(0编辑  收藏  举报