首页 > 数据库 >django中开启事务,GEO地理位置信息、持久化方案、主从复制原理和方案、哨兵高可用、集群原理及搭建、缓存优化、mysql主从、django做读写分离

django中开启事务,GEO地理位置信息、持久化方案、主从复制原理和方案、哨兵高可用、集群原理及搭建、缓存优化、mysql主从、django做读写分离

时间:2023-04-20 18:34:14浏览次数:42  
标签:aof 主从复制 transaction 持久 AOF 开启 django rdb 原理

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

相关文章

  • 4.3 路由器的工作原理
    一、整体结构 1.路由器两个核心功能  ①运行路由算法/协议  ②将分组从路由器的输入链路传送到正确的输出链路 2.体系结构  选路处理器负责路由选择,位于控制平面(软件);  其余位于数据平面(硬件)二、输入端口 1.线路端接模块:将一条物理链路端接到路由器......
  • Redis持久化、主从复制、哨兵高可用
    Redis持久化、主从复制、哨兵高可用Redis持久化1.什么是持久化?Redis的所有数据保存在内存中,对数据的更新将异步的保存到硬盘上2.持久化的实现方式?快照:某时某刻数据的一个完成备份mysql---->Doumpredis---->RDB写日志:任何操作记录日志,要恢复日志,只要吧日志重新走......
  • MySQL GTID 主从复制错误修复方法
    MySQL传统的主从复制方式使用master_log_files和master_log_pos两个参数来确定复制位点。当出现复制错误时,可以设置跳过出错的事务来恢复同步,MySQL提供了sql_slave_skip_counter参数来实现此功能。使用方法如下:root@(none)>stopslave;QueryOK,0rowsaffected(0.0......
  • JPCAP——JAVA中的数据链路层控制(监听原理) ARP欺骗
    监听原理在详细说用JPCAP实现网络监听实现前,先简单介绍下监听的原理。局域网监听利用的是所谓的“ARP欺骗”技术。在以前曾经一段阶段,局域网的布局是使用总线式(或集线式)结构,要到达监听只需要将网卡设定为混杂模式即可,但现在的局域网络普遍采用的是交换式网络,所以单纯靠......
  • 多表连接原理
    评:学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念......
  • 编写你的第一个 Django 应用程序,第6部分
    本教程从教程5停止的地方开始。我们已经构建了一个经过测试的网络投票应用程序,现在我们将添加一个样式表和一个图像。除了服务器生成的HTML之外,Web应用程序通常需要提供呈现完整网页所需的其他文件(例如图像、JavaScript或CSS)。在Django中,我们将这些文件称为“静态文件”......
  • Java偏向锁实现原理(Biased Locking)
    评:阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lockrecord,markword之类的名词。可以参考我的一篇博文:Java轻量级锁原理详解(LightweightLocking)Java偏向锁(BiasedLocking)是Java6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行......
  • 编写你的第一个 Django 应用程序,第5部分
    本教程从教程4停止的地方开始。我们已经构建了一个网络投票应用程序,现在我们将为其创建一些自动化测试。一、自动化测试简介1.什么是自动化测试?测试是检查代码操作的例程。测试在不同级别运行。一些测试可能适用于微小的细节(特定的模型方法是否按预期返回值?),而其他测试则检查......
  • Django笔记九之model查询filter、exclude、annotate、order_by
    本文首发于公众号:Hunter后端原文链接:Django笔记九之model查询filter、exclude、annotate、order_by在接下来四五篇笔记中,将介绍model查询方法的各个细节,为我们的查询操作提供各种便利。本篇笔记将介绍惰性查找、filter、exclude、annotate等方法,目录如下:惰性查找filtere......
  • 计算机组成原理-ARM指令集体系结构(二)
    ARM汇编语言ARM指令格式LabelOp-codeoperand1,operand2,operand3;comment 一段简单的ARM代码(执行后R0寄存器的值为0x0C,R1寄存器的值为0x0C): 汇编伪指令AREA定义代码段。例子中的代码段名字为MyCODE,属性为CODE。汇编伪指令ENTRY告诉汇编器在哪里找到要执行的第一条指令......