Redis学习笔记
Redis数据库(保存在内存)
安装
4.0.9版本下载链接 http://download.redis.io/releases/redis-4.0.9.tar.gz
step1 下载: wget http://download.redis.io/releases/redis-4.0.9.tar.gz
step2 解压: tar xzf redis-4.0.9.tar.gz
step3 移动: sudo mv ./redis-4.0.9 /usr/local/redis/
step4 进入目录: cd /usr/local/redis
step5 生成: sudo make
step6 测试: sudo make test (这段运行时间会较长)
step7 安装: sudo make install (将redis的命令安装到/usr/local/bin/⽬录)
step8 查看安装: cd /usr/local/bin (进入到/usr/local/bin中查看)
ls -all
目录: redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof AOF文件修复工具
redis-check-rdb RDB文件检索工具
step9 配置文件: sudo cp /usr/local/redis/redis.conf /etc/redis/ (移动到/etc/⽬录下)
配置⽂件⽬录为/usr/local/redis/redis.conf
sudo cp /usr/local/redis/redis.conf /etc/redis/
配置
Redis的配置信息在/etc/redis/redis.conf下
查看: sudo vi /etc/redis/redis.conf
绑定IP: bind 127.0.0.1 (如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip)
端口: port 6379
是否以守护进程运行: 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
如果以⾮守护进程运⾏,则当前终端被阻塞
设置为yes表示守护进程,设置为no表示⾮守护进程
推荐设置为yes
daemonize yes
数据文件: dbfilename dump.rdb
数据文件存储路径: dir /var/lib/redis
日志文件: logfile "/var/log/redis/redis-server.log"
数据库(默认16个): database 16
主从复制,类似于双机备份: slaveof
redis配置信息参考资料: http://blog.csdn.net/ljphilp/article/details/52934933
服务器端
服务器端的命令为: redis-server
查看帮助文档: redis-server --help
查看redis服务器进程: ps aux | grep redis
杀死redis服务器: sudo kill -9 pid
指定加载的配置文件: sudo redis-server /etc/redis/redis.conf
客户端
客户端的命令为; redis-cli
查看帮助文档: redis-cli --help
链接redis: redis-cli
运行测试: ping
切换数据库(0-15): select num
redis数据结构
redis是key-value的数据结构,每条数据都是一个键值对
键的类型是字符串,注意! 键不能重复
值的类型分为5种:
字符串string,哈希hash,列表list,集合set,有序集合zset
string
# 保存 如果设置的键不存在则添加,如果设置的键存在则修改
设置键值: set key value
设置键值及过期时间,以秒为单位: setex key seconds value
设置多个键值: mset key1 value1 key2 value2 ...
追加值: append key value
# 获取
根据键获取值,如果不存在此键则返回nil: get key
根据多个键获取多个值: mget key1 key2 ...
# 删除
删除键及对应的值: del key1 key2 ...
# 键命令
查找键,参数支持正则表达式: keys pattern
查看所以键: keys*
查看名称中包含某个字母的键(如a): keys 'a*'
判断键是否存在,如果存在返回1,不存在返回0: exists key1
查看键对应的value的类型: type key
设置过期时间,以秒为单位,如果没有指定过期时间则一直存在,直到用DEL移除: expire key seconds
查看有效时间,以秒为单位: ttl key
hash (用于存储对象,对象的结构为属性、值;值的类型为string)
# 增加
设置单个属性: hset key field value
设置多个属性值: hmset key field1 value1 field2 value2 ...
# 修改
Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用
原因:
强制关闭Redis快照导致不能持久化。
解决方案:运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on- bgsave-error解决该问题。
# 获取
获取指定键的所有属性:hkeys key
获取一个属性的值: hget key field
获取多个属性的值: hmget key field1 field2 ...
获取所有属性的值: hvals key
# 删除
删除整个hash键及值,使用del命令
删除属性,属性对应的值会被一起删除: hdel key field1 field2 ...
list (元素类型为string,按照插入的顺序排序)
# 增加
在左侧插入数据: lpush key value1 value2 ...
在右侧插入数据: rpush key value1 value2 ...
在指定的元素前或后插入数据: linsert key before或after 现有元素 新元素
# 获取
返回列表里指定范围内的元素: lrange key start stop
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
# 设定指定索引位置的元素值
lset key index value
索引从左侧开始,第⼀个元素为0;
索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
# 删除
删除指定元素: lrem key count value
将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有
set(无序集合;元素为string类型;元素具有唯一性,不重复)
# 增加
增加元素: sadd key member1 member2 ...
# 获取
返回所有的元素: smembers key
# 修改
对于集合没有修改操作
# 删除
删除指定元素: srem key
zset (有序集合;元素为string类型;元素具有唯一性,不重复;)
#! 每个元素都会关联一个double类型的score,表示权重,通过权重讲元素从小到大排序
# 增加
添加: zadd key score1 member1 score2 member2 ...
# 获取
zrange key start stop
返回指定范围内的元素
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
返回score值在min和max之间的成员: zrangebyscore key min max
返回成员member的score值: zscore key member
# 修改
没有修改操作
# 删除
删除指定元素: zrem key member1 member2 ...
删除权重在指定范围的元素: zremrangebyscore key min max
与Python交互
安装包:安装Redis有三种方式
<https://github.com/andymccurdy/redis-py>
第一种: 进入虚拟环境,联网安装redis
pip install redis
第二种: 进入虚拟环境,联网安装redis
easy_install redis
第三种: 到中文官网—客户端下载redis包的源码,使用源码安装
一步步执行 wget https://github.com/andymccurdy/redis-py/archive/master.zip
unzip master.zip
cd redis-py-master
sudo python setup.py install
调用模块
引入模块:from redis import *
这个模块中提供了StrictRedis对象(Strict严格),⽤于连接redis服务器,并按照不同类型提供 了不同⽅法,进⾏交 互操作
StrictRedis对象方法
通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默 认为0
sr = StrictRedis(host='localhost', port=6379, db=0)
简写
sr=StrictRedis()
根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致
使用StrictRedis对象对string类型数据进行增删改查
# 在桌面上创建redis目录
# 使用pycharm打开 redis目录
# 创建redis_string.py文件
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
except Exception as e:
print(e)
# string-增加
# ⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#添加键name,值为itheima
result=sr.set('name','itheima') # True
#输出响应结果,如果添加成功则返回True,否则返回False
print(result)
except Exception as e:
print(e)
# string-获取
# ⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#获取键name的值
result = sr.get('name') # b'itheima'
#输出键的值,如果键不存在则返回None
print(result)
except Exception as e:
print(e)
# string-修改
# ⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
result = sr.set('name','itcast') # True
#输出响应结果,如果操作成功则返回True,否则返回False
print(result)
except Exception as e:
print(e)
# string-删除
# ⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
result = sr.delete('name')
#输出响应结果,如果删除成功则返回受影响的键数,否则则返回0
print(result)
except Exception as e:
print(e)
# 获取键
# ⽅法keys,根据正则表达式获取键
from redis import *
if __name__=="__main__":
try:
#创建StrictRedis对象,与redis服务器建⽴连接
sr=StrictRedis()
#获取所有的键
result=sr.keys() # [b':1:xadmin_themes', b'name']
#输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表
print(result)
except Exception as e:
print(e)
模型类序列化器ModelSerializer
如果要使用序列化器对应的是Django的模型类,DRF提供了ModelSerializer模型类序列化器来快速创建一个Serializer
ModelSerializer与常规的Serializer相同,但提供了:
- 基于模型类自动生成一系列字段
- 包含默认的
create()和update()的实现
定义:
class 序列化器(serializers.ModelSerializer):
class Meta:
model = 模型类名
fields = '__all__'
model:指明参照哪个模型类fields:指明为模型类的哪些字段生成
指定字段:
使用fields来指明字段,__all__表示包含所有字段,也可以写明具体的字段
fields = (字段名1, 字段名2, ...)
使用exclude可以明确排除掉哪些字段
exclude = (字段名1, 字段名2, ...)

浙公网安备 33010602011771号