django中开启事务
# django中如何开启事务
全局开启:每个http请求都在一个事务中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lqz',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'lqz',
'PASSWORD': 'lqz123',
#全局开启事务,绑定的是http请求响应整个过程
'ATOMIC_REQUESTS': True,
}
}
每个视图函数开启
from django.db import transaction
@transaction.atomic
def seckill(request):
局部开启
from django.db import transaction
def seckill(request):
with transaction.atomic():
pass
return HttpResponse('秒杀成功')
保存点,回滚保存点Savepoint
设置回滚点:sid = transaction.savepoint()
提交回滚点:transaction.savepoint_commit(sid) transaction.commit()
回滚到回滚点:transaction.savepoint_rollback(sid) transaction.rollback()
事务提交后回调函数
transaction.on_commit(send_email)
GEO地理位置信息
# GEO(地理信息定位):存储经纬度,计算两地距离,范围等
根据经纬度---》确定具体地址的---》高德开放api---》返回具体地址
# redis 可以存储经纬度,存储后可以做运算,
比如:两个经纬度之间距离 (直线距离)
比如:统计某个经纬度范围内有哪些好友,餐馆
# 经纬度如何获取
跟后端没关系:只需要存
app,有定位功能
网页,集成了高德地图,定位功能
# redis存储
geoadd key 经度 纬度 名字
# 添加
geoadd cities:locations 116.28 39.55 beijing
# 查看位置信息
geopos cities:locations beijing #获取北京地理信息
#计算两个点距离
geodist cities:locations beijing tianjin km
# 计算附近的 xx
georadiusbymember cities:locations beijing 150 km
# 5大数据类型的 : 有序集合
持久化方案
# 什么是持久化
redis的所有数据保存在内存中,把内存中的数据同步到硬盘上这个过程称之为持久化
# 持久化的实现方式
快照:某时某刻数据的一个完整备份(有可能丢数据)
mysql的Dump
redis的RDB
写日志:任何操作记录日志,要恢复数据,只要把日志重新走一遍即可
mysql的 Binlog
Redis的 AOF
RDB
# rdb 持久化配置方式
方式一:通过命令---》同步操作
save:生成rdb持久化文件
方式二:异步持久化---》不会阻塞住其他命令的执行
bgsave
方式三:配置文件配置--》这个条件触发,就执行bgsave
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir "/root/redis-6.2.9/data"
如果60s中改变了1w条数据,自动生成rdb
如果300s中改变了10条数据,自动生成rdb
如果900s中改变了1条数据,自动生成rdb
AOF方案
# 可能会数据丢失---》可以使用aof方案
# aof是什么:客户端每写入一条命令,都记录一条日志,放到日志文件中,如果出现宕机,可以将数据完全恢复
# AOF的三种策略
日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上
always:redis–》写命令刷新的缓冲区—》每条命令fsync到硬盘—》AOF文件
everysec(默认值):redis——》写命令刷新的缓冲区—》每秒把缓冲区fsync到硬盘–》AOF文件
no:redis——》写命令刷新的缓冲区—》操作系统决定,缓冲区fsync到硬盘–》AOF文件
# AOF重写
随着命令的逐步写入,并发量的变大, AOF文件会越来越大,通过AOF重写来解决该问题
本质就是把过期的,无用的,重复的,可以优化的命令,来优化,这样可以减少磁盘占用量,加速恢复速度
# AOF重写配置参数
auto-aof-rewrite-min-size:500m
auto-aof-rewrite-percentage:增长率
# aof持久化的配置
appendonly yes #将该选项设置为yes,打开
appendfilename "appendonly.aof" #文件保存的名字
appendfsync everysec #采用第二种策略
no-appendfsync-on-rewrite yes #在aof重写的时候,是否要做aof的append操作,因为aof重写消耗性能,磁盘消耗,正常aof写磁盘有一定的冲突,这段期间的数据,允许丢失
混合持久化
# 可以同时开启aof和rdb,他们是相互不影响的
# redis 4.x以后,出现了混合持久化,其实就是aof+rdb,解决恢复速度问题
#开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理
# 配置参数:必须先开启AOF
# 开启 aof
appendonly yes
# 开启 aof复写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 开启 混合持久化
aof-use-rdb-preamble yes # 这正有用的是这句话
# 关闭 rdb
save ""
# aof重写可以使用配置文件触发,也可以手动触发:bgrewriteaof
标签:aof,主从复制,transaction,持久,AOF,开启,django,rdb,原理
From: https://www.cnblogs.com/xm15/p/17337859.html