redis数据库与接口缓存
1、官网下载:安装包或是绿色面安装
2、安装并配置环境变量
redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定)
mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合)
大量访问的临时数据,才有redis数据库更优
redis: 操作字符串、列表、字典、无序集合、有序集合 | 支持数据持久化(数据丢失可以找回(默认持久化,主动持久化save)、可以将数据同步给mysql) | 高并发支持
memcache: 操作字符串 | 不支持数据持久化 | 并发量小
""" 前提:前往一个方便管理redis持久化文件的逻辑再启动服务:dump.rdb 1)前台启动服务 >: redis-server 2)后台启动服务 >: redis-server --service-start 注)Linux系统后台启动(或是修改配置文件,建议采用方式) >: redis-server & 3)配置文件启动前台服务 >: redis-server 配置文件的绝对路径 4)配置文件启动后台服务 注)windows系统默认按Redis安装包下的redis.windows-service.conf配置文件启动 >: redis-server --service-start 注)Linux系统可以完全自定义配置文件(redis.conf)后台启动 >: redis-server 配置文件的绝对路径 & """ """ windows系统 1)前台启动 i)打开终端切换到redis安装目录 >: cd C:\Apps\Redis ii)启动服务 >: redis-server redis.windows.conf 2)后台启动 i)打开终端切换到redis安装目录 >: cd C:\Apps\Redis ii)启动服务(后面的配置文件可以省略) >: redis-server --service-start redis.windows-service.conf """
""" 1)提倡在配置文件中配置,采用配置文件启动 requirepass 密码 2)当服务启动后,并且连入数据库(redis数据库不能轻易重启),可以再改当前服务的密码(服务重启,密码重置) config set requirepass 新密码 3)已连入数据库,可以查看当前数据库服务密码 config get requirepass """
""" 1)默认连接:-h默认127.0.0.1,-p默认6379,-n默认0,-a默认无 >: redis-cli 2)完整连接: >: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码 3)先连接,后输入密码 >: redis-cli -h ip地址 -p 端口号 -n 数据库编号 >: auth 密码 """
在连入数据库后执行
>: select 数据库编号
""" 1)先连接数据库,再关闭redis服务 >: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码 >: shutdown 2)直接连接数据库并关闭redis服务 >: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码 shutdown """
连接数据库执行
>: flushall
1、Redis实现数据持久化的两种实现方式:
RDB:指定的时间间隔内保存数据快照(默认的方式)
AOF:AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,redis还能对AOF文件进行后台重写,使得AOF文件的体积过大。
2、RDB与AOF优缺点
RDB:
优点:保存数据快照,文件小,恢复快
缺点:无法保存最近一次快照之前的数据,数据可能会丢失
AOF:
优点:保存的数据全
缺点:AOF模式要把每一步redis命令都记录下来,所以就导致文件的体积会很大,恢复慢
""" 1)配置文件默认配置 save 900 1 # 超过900秒有1个键值对操作,会自动调用save完成数据持久化 save 300 10 # 超过300秒有10个键值对操作,会自动调用save完成数据持久化 save 60 10000 # 超过60秒有10000个键值对操作,会自动调用save完成数据持久化 2)安全机制 # 当redis服务不可控宕机,会默认调用一下save完成数据持久化(如果数据量过大,也可能存在部分数据丢失) 3)主动持久化 >: save # 连入数据库时,主动调用save完成数据持久化 注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径 """
""" 1)绑定的ip地址,多个ip用空格隔开 bind 127.0.0.1 2)端口,默认6379,一般不做修改 port 6379 3)是否以守护进程启动,默认为no,一般改为yes代表后台启动(windows系统不支持) daemonize no 4)定义日志级别,默认值为notice,有如下4种取值: debug(记录大量日志信息,适用于开发、测试阶段) verbose(较多日志信息) notice(适量日志信息,使用于生产环境) warning(仅有部分重要、关键信息才会被记录) loglevel notice 5)配置日志文件保持地址,默认打印在命令行终端的窗口上 如果填写 "./redis.log" 就会在启动redis服务的终端所在目录下,用redis.log记录redis日志 logfile "" eg)终端首先切换到log文件夹所在目录(一般就可以采用redis的安装目录,也可以自定义),再启动reids服务 logfile "./log/redis.log" 6)数据库个数,默认是16个,没特殊情况,不建议修改 databases 16 7)数据持久化 save 900 1 # 超过900秒有1个键值对操作,会自动调用save完成数据持久化 save 300 10 # 超过300秒有10个键值对操作,会自动调用save完成数据持久化 save 60 10000 # 超过60秒有10000个键值对操作,会自动调用save完成数据持久化 8)数据库持久化到硬盘失败,redis会立即停止接收用户数据,让用户知道redis持久化异常,避免数据灾难发生(重启redis即可),默认为yes,不能做修改 stop-writes-on-bgsave-error yes 9)消耗cpu来压缩数据进行持久化,数据量小,但会消耗cpu性能,根据实际情况可以做调整 rdbcompression yes 10)增持cpu 10%性能销毁来完成持久化数据的校验,可以取消掉 rdbchecksum yes 11)持久化存储的文件名称 dbfilename dump.rdb 12)持久化存储文件的路径,默认是启动服务的终端所在目录 dir ./ 13)reids数据库密码 requirepass 密码 """
""" 数据操作:字符串、列表、哈希(字典)、无序集合、有序(排序)集合 有序集合:游戏排行榜 字符串: # 设置k,v set key value # 设置k,过期时间,v setex key exp value # 通过k获取值 get key # 批量设置k,v mset k1 v1 k2 v2 ... # 批量通过k获取值 mget k1 k2 ... # 将key所储存的值加上给定的增量值(increment) incrby key increment 列表: # 往右添加值(正序) rpush key value1 value2 ... # 往左添加值(反序) lpush key value1 value2 ... # 切片取值(顾头也顾尾) lrange key start end # 索引取值 lindex key index # 从左|右踢出一个 lpop key | rpop key # 在一个值前面|后面插入一个 linsert key before|after old_value new_value 哈希: # 设置字典名 字典k 字典v hset key field value # 获取值,字典名 字典k hget key field # 批量设置k,v hmset key field1 value1 field2 value2 ... # 批量获取k,v hmget key field1 field2 # 通过字典名取该字典下的所有的key hkeys key # 通过字典名取该字典下的所有的value hvals key # 通过字典名,key删除键值对 hdel key field 集合: # 添加集合,值 sadd key member1 member2 ... # k1 - k2 差集(去除共同的保留k1) sdiff key1 key2 ... # 将差集保存到新的名字里 sdiffstore newkey key1 key2 ... # 交集 sinter key1 key2 ... # 并集 sunion key1 key2 ... # 查看所有的值 smembers key # 随机删除集合中一个值 spop key 有序集合: # 添加 集合名 值1 成员1 值2 成员2 zadd key value1 member1 value2 member2 ... # 给某一个成员对应的值加值 zincrby key value member # 查看后几名 zrange key start end # 查看前几名 zrevrange key start end """
下载模块
pip3 install redis
import redis # decode_responses=True得到的结果会自动解码(不是二进制数据) r = redis.Redis(host='127.0.0.1', port=6379, db=1, password=None, decode_responses=True)
import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=1, max_connections=100, password=None, decode_responses=True) r = redis.Redis(connection_pool=pool)
# 1.将缓存存储位置配置到redis中:settings.py CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100}, "DECODE_RESPONSES": True, "PASSWORD": "Admin123", } } }
# 2.操作cache模块直接操作缓存:views.py from django.core.cache import cache # 结合配置文件实现插拔式 # 存放token,可以直接设置过期时间 cache.set('token', 'header.payload.signature', 300) # 取出token token = cache.get('token')