Redis数据库
一. 简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
二. 数据操作
补充: Redis数据库有16个,编号分别是0-15,每个数据库用数字命名,选择数据库用命令 select number, redis的数据库个数,也是可以修改的,redis.conf里面设置了databases 16,默认是16个,0-15,如果要修改数据库个数,可以修改这个配置,修改 redis 目录下的 redis.comfig 中的 databases .
1. string类型
- 设置键值
set key value
- 设置键值及过期时间
setex key second value
- 设置多个键值
mset key1 value1 key2 value2...
- 追加值 ,对已经存在的键,对他的值进行追加内容
append key value
- 获取键值,如果不存在则返回 nil
get key
- 获取多个键值
mget key1 key2...
- 删除键及对应的值
del key1 key2...
2. hash 类型
- 简介:hash用于存储对象,对象的结构为属性 - 值
- 设置单个属性
hset key property value
// 例:设置键 student 的属性 name 的值为 xiaohei
hset student name xiaohei
- 设置多个属性
hset key property1 value1 property2 value2...
// 例: 设置键 student 的属性 name ,age 的值分别为 xiaohei ,23
hset student name xiaohei age 23
- 获取指定键的所有属性
hkeys key
// 例:获取 student 的所有属性(有 name 和 age)
hkeys student
- 获取一个属性的值
hget key property
// 例: 获取 student 键的 name 属性的值
hget student name
- 获取多个属性的值
hget key property1 property2...
// 例:获取 student 的 name 和 age 属性
hget student name age
- 获取所有属性的值
hvals key
// 例: 获取 student 的所有属性的值(不通过键来获取指定的值,直接获取所有属性的值)
hvals student
- 删除 hash 的键和值(删除一个或多个属性)
hdel key property1 property2...
// 例: 删除 hash 中的 student 键值 所对应的 name 和 age 属性
hdel student name age
3.list 类型
- 简介:列表的类型为 String ,按照插入顺序排序
- 在左,右侧插入数据(也就是创建一个新的列表)
// 左侧:
lpush key value1 value2 ...
// 右侧:
rpush key value1 value2 ..
// 注:从左侧插入数据,得到的列表的顺序和插入数据的顺序相反
- 在指定元素前或后插入数据(before , after)
// key 列表,在 oldvalue 之前 插入新的元素 newvalue
linsert key before oldvalue newvalue
// key 列表,在 oldvalue 之后 插入新的元素 newvalue
linsert key after oldvalue newvalue
- 返回列表里指定范围内的元素
// start , stop 为元素下标的索引,索引下表从 0 开始
lrange key start end
// 例: 获取键值为 test_list 的列表里的所有元素
lrange test_list 0 -1
- 设置指定索引位置的元素值
// index 表示索引的下标值,将下标位置的额值替换成 newvalue 的值
lset key index newvalue
- 删除指定元素
// 将列表前 count 次出现值为 value 的元素删除
// count > 0 : 从表头到表尾删除
// count < 0 : 从表尾到表头删除
// count = 0 :删除所有的元素
lrem key count value
// 例:设 test_list 中存在 【1,2 ,3,3,4,3,2,1】,删除从表尾到表头第 2 次出现的 3
lrem test_list -2 3
4.set 类型
- set 类型的特点:
1. set 是无序集合
2. 元素为 String 类型
3. 元素是唯一的,不可重复
4. set 类型集合,没有修改操作,类似 python 中的元组
- 增加元素
sadd key element1 element2 ...
// 例:向 number 集合中添加 1 , 2 , 3 元素
sadd number 1 2 3
- 获取所有的元素
smembers key
// 例:获取 number中的所有元素
smembers number
- 删除指定元素
srem key
// 例: 删除 number 中的 1 元素
srem number 1
zset 类型
- zset 类型的特点:
1. zset 是有序的集合
2. 元素类型都为 String
3. 元素是唯一的,不允许重复
4. 每一个元素都会关联一个 double 类型的 score,表示权重,通过权重对集合中的元素进行从小到大的排序
5. 没有修改操作
- 增加元素
zadd key score1 element1 score2 element2 score3 element3...
// 例: 向 member 集合中添加 zhangsan,lisi,wangwu,权重分别为3,4,5
zadd member 3 zhangsan 4 lisi 5 wangwu
// 存入的顺序为 权重值的从小到大排序
- 获取
// 通过 key 值的下标获取
zrange key start end
// 通过 权重 来获取,获取权重在 low 和 up 之间的元素
zrangebyscore key 3 5
// 返回 key 中元素的权重值
zscore key element
- 删除
// 删除指定元素
zrem key element1 element2
// 删除权重在指定范围内的元素值
zremrangebyscore key low up
// 例:删除 member 集合中权重在 3 到 5 之间的元素
zremrangebyscore member 3 5
三. 与python交互
1. 编写 python 脚本文件连接 Redis 数据库
from redis import *
if __name__ == "__main__":
try:
# host:指定的服务器端口,默认为 localhost
# port:指定的端口号,默认为6379
# db:所选择的数据库,默认为第 0 号数据库
re = StrictRedis(host='localhost',port=6379,db=0)
# 接下来就可以用 re . 的 方法对数据进行 增删改查了
# 设置键为 name , value 为 xiaohei
result1 = re.set("name","xiaohei")
# 获取 name 的值
result2 = re.get("name")
# 修改 name 键的值为 xiaobai
result3 = re.set("name","xiaobai")
# 删除 name 键值
result4 = re.delete("name")
# 获取所有的 键
result5 = re.keys()
except Exception as e:
print(e)
2.django 项目中用 redis 来存储 session 信息
- 第一步 : 先安装包 django-redis-sessions, 命令: pip install django-redis-sessions
- 第二步 : 修改 Django 项目下的 settings 文件 , 添加如下内容
# 设置使用 redis 存储 session 信息
SESSION_ENGING = 'redis_sessions.session'
# redis 服务的ip地址
SESSION_REDIS_HOST = 'localhost'
# redis 服务的端口号
SESSION_REDIS_PORT = 6379
# redis 使用的哪个数据库
SESSION_REDIS_DB = 2
# redis 密码
SESSION_REDIS_PASSWORD = ''
# # redis存储信息前缀
SESSION_REDIS_PREFIX = 'session'
- 第三步 : 测试
# 在 views 中编写视图
from django.http import HttpResponse
def set_session(request):
"""设置session信息"""
username = request.POST.get('username')
request.session['username'] = username
return HttpResponse('设置session信息')
def get_session(request):
"""获取session信息"""
username = request.session['username']
return HttpResponse(username)
# 在 urls 配置中, 配置 url 地址
url(r'^set_session$', views.set_session),
url(r'^get_session$', views.get_session),