NoSQL:快速上手学Redis数据库
作者:小新python入门到放弃 Python爱好者社区专栏作者
原文:https://mp.weixin.qq.com/s/FsRyx6vmDU2nhMtMDsNIGQ
Redis简介
Redis是一种nosql数据库(非关系型数据库),存取数据的格式是像字典一样key->value的形式。
关系型数据库和非关系型数据库的区别
关系型数据库比较适用于关系复杂的数据查询,nosql反之。nosql数据库不支持事务,各有各的好处,想爬虫的数据储存就经常用到nosql。
Redis数据库的优势
1、性能高
2、数据类型丰富
3、原子性
4、其他还有很多特性
Redis数据库的安装
windows下安装
下载地址:http://download.redis.io/releases/redis-5.0.3.tar.gz
解压到你安装的文件夹,打开cmd,切换到redis的目录下,输入:redis-server.exe redis.server.conf,再打开一个cmd,切换到redis目录下,输入redis-cli.exe,即可进行存储数据,测试一下输入set test "hello word",再输入的时候会有提示,我们不管,你写你的就好了,取数据get test 输出hello word ,运行成功。
Redis中的数据库
在redis数据库中我们的数据库是用所以来的,切换数据库用select关键字。新进入一个数据库,都是空的。比如我想进入2数据库,select 2 ,以此来把数据分开。
数据结构
首先他是key,value的形式来存储数据,键是不能重复的。
值的类型:
字符串string
哈希 hash
列表 list
集合 set
有序集合 zset(把集合变得有序)
增删改查操作
string类型
保存数据
set key value
比如 set name zhangsan
取值
get name
修改
set name zhangsan111
也就是说key存在就是修改,不存在就是修改。
设置key的过期时间(也就是多少秒后该key就没有了)
setex key 过期时间 值
例如: setex q 5 q
5秒后过期
另一种方法
expir q 5
查看还有是多少秒过期
ttl key
设置多个键值
mset key1 value1 key2 value2 可以继续往下写
对某个key追加数据
append key value
一下获取多个值
mget key1 key2
查看所有键值
keys *
查看以a开头的键
keys a*
判断一个键是否存在
exists key
存在返回1,不存在返回0
查看某个键对应的值的类型
type key
删除键
del key1 key2
hash类型
存储对象可以用hash类型。
添加,修改
hset key 属性 值
比如一个user对象,里面含有name = zhangsan
hset user name zhangsan
一次插入多个属性
hmset user 属性1 值1 属性2 值2
查看
查看hash的属性
hkeys key
比如hkeys user
查看某个属性的值
hget key 属性
比如 hget user name
一次查看多个属性的值
hmget user name age
获取所有属性的值
hvals key
比如 hvals user
删除
删除一整个对象
del key
比如 del user
删除属性
hdel key 属性1 属性2
比如 hdel user name age
list类型
添加
lpush key 值1 值2 值3
比如 lpush list 1 2 3
截取列表
lrange key 索引1 索引2
比如 lrange list 0 1
显示前两个。
上面的是从左侧插入数据,也可以从右侧插入数据
rpush key 值1 值2 值3
给list在右侧添加两个数据
rpush list 4 5
在指定元素前或后插入数据
比如向list 3 前插入6
linsert list before 3 6
before表示前,after表示后,我们在list 3 后插入7
linsert list after 3 7
获取数据
lrange key 起始索引 结束索引
结束索引是包含在内的。
查看所有
lrange key 0 -1
设置指定位置的值
lset key index value
比如在索引为1的位置为a
lset list 1 a
删除
删除指定元素
count >0:从左往右移除
count <0:从右往左移除
count = 0:移除所有
lrem key count value
比如移除list中a,只移除一次,从左往右移除:
lrem lsit 1 a
set类型
无序列表
元素为string类型
元素不能重复
没有修改操作
添加元素
sadd key 元素1 元素2
获取元素
smembers key
删除
srem key 元素
zset
和set一样,但是是有序的。
为什么变得有序,是因为我们要自己添加一个权重,根据权重从小到大排序
添加
zadd key 权重1 元素1 权重2 元素2
注意:权重就是一个数字。
获取
查看指定位置
zrange key 起始索引 结束索引
查看所有
zrange key 0 -1
查看权重在0到10之间的
zrangebyscore key 0 10
查看一个元素的权重值
zscore key 元素
删除
删除指定元素
zrem key 元素1 元素2
删除权重值在0到10之间的
zremrangebyscore key 0 10
redis和python的交互
安装包 pip install redis
# 导入模块
from redis import StrictRedis
# 创建一份StrictRedis对象
sr =StrictRedis(hsot='localhost',port = 6378,db=0)
# 可以简写成
sr1 = StrictRedis()
# 此时我们的sr1对象就有了上面的方法
比如添加一个key为classname,value为Redis一班。
sr1.set('classname','Redis一班')
# 返回的是一个bool值。
# 获取值
ret = sr1.get('classname')
print(ret)
# 改变值
upret = sr1.set('classname','Redis二班')
print(upret)
# 删除
sr1.delete("classname")
# 返回1表示一个,0表示一个都没有删除
# 也可以删除多个
sr1.delete("xxx","xxxxxx")
# 返回数字,如果为2表示都删除了
# 获取所有的键
sr1.keys()
# 其他操作都大同小异
Django使用Redis的作用
在Django框架中经常使用redid来保存我们的session值。
如何配置用我们的redis数据库来储存我们的session?
首先在虚拟环境中安装包:pip install django-redis-session==0.5.6
需要在settings.py中配置:
你使用的主要数据库还是mysql数据库,只是单独的session保存在sredis数据库中。
添加一下配置:
# 设置redis储存session
SESSION_ENGINE = 'redis_session.session'
# ip地址
SESSION_REDIS_HOST = 'localhost'
# 端口号
SESSION_REDIS_PORT = 6379
# 那个数据库
SESSION_REDIS_DB = 2
# 密码,我们没有设置密码
SESSION_REDIS_PASSWORD = ''
# session的标识码
SESSION_REDIS_PREFIX='session'
在Django中读取和设置session都还是一样的,没有区别