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支持事务吗 单实例才支持所谓的事物,支持事务是基于管道的 -执行命令 一条一条执行 -张三 金额 -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()
# 第一步:写一个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})