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, ...)
posted @ 2021-03-07 22:34  shangkh  阅读(34)  评论(0)    收藏  举报