Redis其他操作、管道、django中使用redis

Redis其他操作

import redis

conn = redis.Redis()


1.delete(*names) # 根据删除redis中的任意数据类型 conn.delete('name', 'userinfo2') # conn.delete(['name', 'userinfo2']) # 不能用它 # conn.delete(*['name', 'userinfo2']) # 可以用它 2.exists(name) # 检测redis的name是否存在 res=conn.exists('userinfo') print(res) 3.keys(pattern='*') # 根据模型获取redis的name # 更多: # KEYS * 匹配数据库中所有 key 。 # KEYS h?llo 匹配 hello , hallo 和 hxllo 等。 # KEYS h*llo 匹配 hllo 和 heeeeello 等。 # KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo res=conn.keys('w?e') # ?表示一个字符, * 表示多个字符 print(res) 4.expire(name ,time) # 为某个redis的某个name设置超时时间 conn.expire('userinfo',3) 5.rename(src, dst) # 对redis的name重命名为 conn.rename('hobby','hobby111') 6.move(name, db)) # 将redis的某个值移动到指定的db下 conn.move('hobby111',8) 7.randomkey() # 随机获取一个redis的name(不删除) res=conn.randomkey() print(res) 8.type(name) # 获取name对应值的类型 print(conn.type('girls')) print(conn.type('age')) conn.close()

Redis 管道

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

# redis支持事务吗   单实例才支持所谓的事物,支持事务是基于管道的
    -执行命令  一条一条执行
        -张三 金额 -100    conn.decr('zhangsan_je',100)

       # 操行到这里时出现异常,则下面的不会继续执行

        -你   金额 100     conn.incr('李四_je',100)
        
        
   - 把这两条命令,放到一个管道中,先不执行,执行excute,一次性都执行完成
    conn.decr('zhangsan_je',100)   conn.incr('李四_je',100)

案例

不使用管道

import redis

conn = redis.Redis()
conn.decr('zhangsan_je',100)    # zhangsan_je的value值少了100
raise Exception('崩了')
conn.incr('lisi_je',100)    # lisi_je的value值没有变化

使用管道

import redis
conn = redis.Redis()

p=conn.pipeline(transaction=True)
p.multi()

p.decr('zhangsan_je',100)   # 两个都不会变化
raise Exception('崩了')   # 如果这行注释到,都会发生变化
p.incr('lisi_je',100)

p.execute()
conn.close()

django中使用redis

方式一:自定义包方案(通用的,不针对与框架,所有框架都可以用)

# 第一步:写一个pool.py
    import redis
    POOL = redis.ConnectionPool(max_connections=100)

# 第二步:以后在使用的地方,直接导入使用即可
    conn = redis.Redis(connection_pool=POOL)
    conn.incr('count')
    res = conn.get('count')

方案二:django的缓存使用redis  【推荐使用】

# settings.py 中配置
        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": "123",
                }
            }
        }

# 要下载django_redis模块


# 第二步:使用
from django.http import JsonResponse

def test_redis(request):
    res=int(cache.get('count'))
    cache.set('count',res+1)
    return JsonResponse({'count':'今天这个接口被访问的次数为:%s'% res},json_dumps_params={'ensure_ascii':False})


# 路由:path('test_redis/',views.test_redis)

方案三:第三方django-redis模块

from django.http import JsonResponse
from django_redis import get_redis_connection

def test_redis(request):
    conn = get_redis_connection()
    res=conn.get('count')
    return JsonResponse({'count':'今天这个接口被访问的次数为:%s'% res},json_dumps_params={'ensure_ascii':False})

 

posted @ 2023-03-08 22:31  莫~慌  阅读(31)  评论(0编辑  收藏  举报