redis
----redis、MongoDB : 非关系型数据库
redis 存储在内存中
MongoDB 存储在硬盘中
l 简介
redis是一个key-value存储系统 , 支持持久化 。
----补充 :比较redis 和 memcached
----redis 支持5大数据类型
----redis 支持持久化
----redis 单线程 , 单进程 , 速度依旧很快(瞬时并发量10w)
----memcached 不能持久化 , 只支持字符串 , 多线程多进程
l 作用
----做缓存
---- session数据
---- 游戏排行榜
---- 对速度要求比较高的数据的存储
---- 消息队列
l 五大数据类型 ★★★★★
redis = {
k1:'123',
k2: [1,2,3,4],
k3: {1,2,3,4},
k4: (1,2,3,),
k5: {('lqz',123), ('xxx',234)}
}
n 字符串
n 列表
n 字典
n 集合
n 有序集合
l redis的使用
set(name, value, ex=None, px=None, nx=False, xx=False)
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
get(self, name)
取出name对应的value
mset(self, mapping)
批量添加值 参数: 映射类型(如 字典)
mget(self, keys, *args)
批量获取值 参数: 想要获取的keys,返回值为列表 mget(['name', 'age', 'mykey1']) or mget('name', 'age', 'mykey1')
inrc(self, name, account=1)
自增, 传入需要自增的key(name), 默认每次自增1, 可以自己设定 通常被用来做访问量计数
decr(self, name, account=1)
自增, 传入需要自增的key(name), 默认每次自减1, 可以自己设定
append(self, name, value)
在对应的值后面追加内容 , 返回值为value的长度 如 'xx' --> 'xx11'
其他方法及使用
方法 |
用途 |
setnx(name, value) |
设置值, 只有name不存在时, 执行设置操作(添加),如果存在, 不会修改 |
setex(name, value, time) |
设置值, time过期时间(数字秒或timedalta对象) |
psetx(name, time_ms, value) |
设置值, time过期时间(数字毫秒或timedalta对象) |
getset(name, value) |
设置新值并返回原来的值 |
strlen(name) |
返回name对应的字节长度(汉字3字节) |
import redis # 建立连接 Redis类中有许多属性,以下简单用了几个,详细了解可以看源码 connect = redis.Redis(port='127.0.0.1', host=6379, password='123456') # res = conn.set('name', 'jason', ex=5) # res = conn.get('name') # res = conn.mset({'name': 'jason', 'age': 24}) # res = conn.mget(['name', 'age', 'mykey1']) # res = conn.incr('age') # res = conn.decr('age') # res = conn.append('name', 'nb') print(res)
在Django中使用redis
l 在所需的app中新建连接池py文件
# redis_pool.py import redis # 配置redis数据库的相关信息(host,port,password,max_connections(默认2**31)) POOL = redis.ConnectionPool(host='127.0.0.1', port=6379, password=123456,max_connections=100)
l 在试图类中进行操作
from app01.redis_pool import POOL def settest(request): conn = redis.Redis(connection_pool=POOL) conn.set('token', 'abcdefg') return HttpResponse('写入成功') def gettest(request): conn = redis.Redis(connection_pool=POOL) token = conn.get('token') return HttpResponse(token)
l 在路由层分发路由
url(r'^settest/', views.settest), url(r'^gettest/', views.gettest)