redis的两种连接方式
简单连接
1 |
import redis |
链接池
若是要连接redis的时候推荐用链接池的方式;若是每次操做都用同一个连接,可使用链接池python
redis使用connection_poll来管理对一个redis服务的全部连接,避免每次创建,释放连接的开销
默认每一个redis实例都会维护一个本身的连接池。能够直接创建一个链接池,而后做为参数redis,这样
就能够实现多个redis实例共享一个链接池redis
1 |
#链接池 |
例子
pool.py
1 |
import redis |
view.py
1 |
from django.shortcuts import render,HttpResponse |
Django-redis组件
安装: pip install django-redisdjango
配置文件app
1 |
CACHES = { |
使用ide
1 |
#利用django-redis组件进行链接 |
redis的字符串操做(string)
Sting操做,redis中的String在内存中按照一个name对应一个value来存储post

一、set(name, value, ex=None, px=None, nx=False, xx=False) # 设置值
在Redis中设置值,默认,不存在则建立,存在则修改
参数:
ex,过时时间(秒)
px,过时时间(毫秒)
nx,若是设置为True,则只有name不存在时,当前set操做才执行
xx,若是设置为True,则只有name存在时,岗前set操做才执行
二、setnx(name, value)大数据
设置值,只有name不存在时,执行设置操做(添加) #至关于只是添加,不能进行修改操做
三、setex(name, value, time)spa
# 设置值 # 参数: # time,过时时间(数字秒 或 timedelta对象)
四、psetex(name, time_ms, value)code
# 设置值 # 参数: # time_ms,过时时间(数字毫秒 或 timedelta对象)
五、mset(*args, **kwargs)对象
批量设置值 如: mset(k1='v1', k2='v2') 或 mset({'k1': 'v1', 'k2': 'v2'})
六、get(name) 获取值
七、mget(keys, *args)
批量获取 如: mget('ylr', 'zzz') 或 r.mget(['ylr', 'zzz'])
八、getset(name, value) 设置新值并获取原来的值
九、getrange(key, start, end)
# 获取子序列(根据字节获取,非字符) # 参数: # name,Redis 的 name # start,起始位置(字节) # end,结束位置(字节) # 如: "拉销量" ,0-3表示 "拉"
待续。。
redis的列表操做(list)
redis的散列表操做(相似于字典里面嵌套字典)
Hash操做,也叫作散列表操做。redis中Hash在内存中的存储格式以下

一、hset(name, key, value)
# name对应的hash中设置一个键值对(不存在,则建立;不然,修改) # 参数: # name,redis的name # key,name对应的hash中的key # value,name对应的hash中的value # 注: # hsetnx(name, key, value),当name对应的hash中不存在当前key时则建立(至关于添加)
二、hmset(name, mapping)
# 在name对应的hash中批量设置键值对 # 参数: # name,redis的name # mapping,字典,如:{'k1':'v1', 'k2': 'v2'} # 如: # r.hmset('xx', {'k1':'v1', 'k2': 'v2'})
三、hget(name,key)
# 在name对应的hash中获取根据key获取value
四、hmget(name, keys, *args)
# 在name对应的hash中获取多个key的值 # 参数: # name,reids对应的name # keys,要获取key集合,如:['k1', 'k2', 'k3'] # *args,要获取的key,如:k1,k2,k3 # 如: # r.mget('xx', ['k1', 'k2']) # 或 # print r.hmget('xx', 'k1', 'k2')
五、hgetall(name) 获取name对应的hash中的全部键值
六、hlen(name) 获取name对应的hash中键值对的个数
七、hkeys(name) 获取name对应的hash中全部的key的值
八、hvals(name) 获取name对应的hash中全部的value的值
九、hexists(name, key) 检查name对应的hash是否存在当前传入的key
十、hdel(name,*keys) 将name对应的hash中指定key的键值对删除
十一、hincrby(name, key, amount=1) 吧原来的值自加1
hincrby ('xxx','slex',amount=-1) #吧原来的值自减1 # 自增name对应的hash中的指定key的值,不存在则建立key=amount # 参数: # name,redis中的name # key, hash对应的key # amount,自增数(整数)
十二、hincrbyfloat(name, key, amount=1.0) 支持浮点型的
1三、hscan(name, cursor=0, match=None, count=None)
# 增量式迭代获取,对于数据大的数据很是有用,hscan能够实现分片的获取数据,并不是一次性将数据所有获取完,从而放置内存被撑爆 # 参数: # name,redis的name # cursor,游标(基于游标分批取获取数据) # match,匹配指定key,默认None 表示全部的key # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数 # 如: # 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None) # 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None) # ... # 直到返回值cursor的值为0时,表示数据已经经过分片获取完毕
1四、hscan_iter(name, match=None, count=None)
# 利用yield封装hscan建立生成器,实现分批去redis中获取数据 # 参数: # match,匹配指定key,默认None 表示全部的key # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数 # 如: # for item in r.hscan_iter('xx'): # print item # for item in r.hscan_iter('xx',match='*lx'): #匹配以lx结尾的 # print item