首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第 12 篇:加缓存为接口提速

作者:HelloGitHub-追梦人物 目前,用户对于接口的操作基本都需要查询数据库。获取文章列表需要从数据库查询,获取单篇文章需要从数据库查询,获取评论列表也需要查询数据。...将那些变化不那么频繁的数据缓存到内存中,内存中的数据相当于数据库中的一个副本,用户查询数据时,不从数据库查询而是直接从缓存中读取,数据库的数据发生了变化时再更新缓存,这样,数据查询的性能就大大提升了。...但是在更为复杂的场景下,不能简单使用 URL 作为 key,比如即使是同一个 API 请求,已认证和未认证的用户调用接口得到的结果是不一样的,所以 drf-extensions 使用 KeyConstructor...例如,同一个 API 请求,已认证和未认证的用户将得到不同的响应结果,我们可以定义 key 的生成规则为请求的 URL + 用户的认证 id。...那么 URL 可以看成一个 KeyBit,用户 id 是另一个 KeyBit。

1.1K40

等保2.0与大数据安全

新时代下国家网络安全面临着哪些新的挑战,等保合规工作又要如何开展? 国家对数据安全、个人信息着重做了铺设和加强。...我们总结起来,在等保2.0下去做数据安全的建设, 主要从这四个方面去展开 用户行为鉴权(加强用户行为的鉴权) 数据访问控制(有效地建立起对数据访问控制机制) 敏感数据脱敏(对数据本身的一些使用和落盘的数据要做脱敏和加密...) 业务/重要数据加密 从这张图上的话想表达的是说构建整个等保2.0下的数据安全,我们应该考虑遵从一个比较科学的规范,也就是数据的生命周期要以一个全生命周期的方式去覆盖去防御我们的生命数据。...防御数据传防御传统的网络安全有个最大差别是原来的网络是有边界的,但数据它相对是个无边界的状态,我们要去遵从一个数据从生存到销毁的自然生命周期,它覆盖了创建存储传输交换处理和销毁这六个生命的自然节点。...最后,在它获取到相应的权限之后,真正地从数据源从数据库里边去获取返回的时候,同样的我们通过我们刚才说了对等保2.0提到的对数据的字段级别的表管控和标签,我们对他所返回的数据可以提供一份非常良好的一个保护措施

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    详解数据库连接池 Druid

    1 为什么需要连接池 假如没有连接池,我们操作数据库的流程如下: 应用程序使用数据库驱动建立和数据库的 TCP 连接 ; 用户进行身份验证 ; 身份验证通过,应用进行读写数据库操作 ; 操作结束后,关闭...当我们有了连接池,应用程序启动时就预先建立多个数据库连接对象,然后将连接对象保存到连接池中。当客户请求到来时,从池中取出一个连接对象为客户服务。...之后,需要保存到 Connections 数组里,并唤醒到其他的线程,这样就可以从池子里获取连接。...我们可以简单的理解:将连接放到 connections 数组的 poolingCount 位置,并将其自增,然后通过 Condition 对象 notEmpty 唤醒等待获取连接的一个应用程序。...对象池是一种设计模式,用于管理可重复使用的对象,以减少对象的创建和销毁开销。 笔者会在接下来的文章里为大家详解: 如何使用池化框架 Commons Pool ; Netty 如何实现简单的连接池。

    2.2K10

    Django-rest-framework 是个什么鬼?

    当用户访问某个 URL 时,调用绑定的视图函数进行处理。 编写视图函数的逻辑。视图中通常涉及数据库的操作。 在视图中渲染 HTML 模板,返回 HTTP 响应。...不同点在于,在传统的基于模板引擎的开发方式中,资源使用 HTML 文档进行描述并返回给客户端,而在 RESTful API 的开发方式中,资源通常被描述为 JSON 或者 XML 的格式返回给客户端。...下面就来简单介绍 django-rest-framework 为我们提供了哪些功能特性,这些功能和特性我们在接下来的实战中会进一步学习其用法,这里可以先从宏观层面,做一个简单的了解。...之前说过,在 RESFful 架构的系统中,资源以某种描述形式在客户端和服务器之间传递,django-rest-framework 根据客户端能够接受的资源格式,自动使用合适的资源描述工具,返回客户端可接受的资源...在接下来的实战教程中,我们会逐一的学习并使用它们。 让我们正式开启 django-rest-framework 的学习之旅吧!

    1K30

    第 11 篇:基于 drf-haystack 的文章搜索接口

    django-haystack 默认返回的搜索结果是一个类似于 django QuerySet 的对象,需要配合模板系统使用,因为未被序列化,所以无法直接用于 django-rest-framework...但是,通过之前的功能我们看到,使用 django-rest-framework 是一个近乎标准化但又枯燥无聊的过程:首先是编写序列化器用于序列化资源,然后是编写视图集,提供对资源各类操作的接口。...现在万事具备了,数据库中已经有了文章,搜索服务已经有了文章的索引,只需要等待客户端来进行查询,然后返回结果。...对象,这个对象就是视图中的 HTTP 请求对象,但是因为 django 中 request 对象无法像 flask 那样从全局获取,因此 drf 在视图中将其保存在了序列化器和序列化字段的 context...属性中以便在视图外访问;获取 request 对象的目的是希望获取查询的关键字,query_params 属性是一个类字典对象,用于记录来自 URL 的查询参数,例如我们之前测试查询功能时调用的 URL

    1.6K20

    Django 开发者都应该清楚的 十 个点

    使用 Celery 进行异步任务和 cron 作业(不需要使用 UNIX cron) 开发的前两个星期,你可能不需要将任务放到异步进程中执行,但是当你的非技术联合创始人开始问为什么这个站点 hang...除非你有充分的理由,否则不要在 RabbitMQ 上浪费时间,我一般使用 Celery 发送邮件或者从 API 拉取数据。另一个小技巧是,你可以设置定期任务作为一个 cron job。...我只是想让一个网站正常运行,并忽略掉我代码里面的 print。Apache 有大量的配置需要去理解,这是我最受不了的。...最最重要的是,你仍然可以使用 Django ORM 和 Django admin 最近笔者看到一个统计报告,关系数据库的份额不降反增,啧啧 为 URL 命一个别名 from django.urls import...正确的使用 settings.py 文件 关于这个,已经有很多讨论了,就我个人而言,我喜欢将生产环境和开发环境的通用配置创建一个新文件 common.py 保存,再创建两个配置文件: 生产环境配置:prod_settings.py

    995140

    MyBatis源码面试题

    如果占位符使用的是#号,MyBatis会将占位符替换成一个具有参数值的字符串;如果占位符使用的是问号,MyBatis会将占位符替换成一个占位符的索引号,并将参数值保存到一个内部数组中。...2.使用@Scope注解 另一个解决方案是在配置文件中使用@Scope注解,将SqlSession的作用域设置为prototype。...可以在配置文件中声明SqlSession bean,并使用@Scope注解将其作用域设置为prototype。在需要使用SqlSession时,可以注入该bean。...Configuration会读取映射文件,将其中的SQL语句解析成MappedStatement对象,并将其保存到mappedStatements集合中。...在执行SQL语句时,如果该语句对应的MappedStatement对象中配置了缓存,则会从caches集合中获取缓存对象,并使用缓存对象来提高查询效率。

    63220

    第 3 篇:实现博客首页文章列表 API

    原因隐藏在 Python 的装饰器魔法里,django-rest-framework 对于上述功能有一套默认的处理逻辑,因此我们不需要进行任何配置,仅需使用 api_view 装饰一个 django 视图函数...视图函数里我们先从数据库获取文章列表资源,然后使用序列化器对其进行序列化,序列化后的数据存在 data 属性里,我们把它传递给 HTTP 响应类 Response,并将这个响应返回。...实际上,这个类是 django-rest-framework 对 django 的模板响应类(SimpleTemplateResponse)的拓展(具体的细节可以不用了解,只要知道 django 使用它来渲染模板并构造...在转换过程中,还会进行数据合法性的校验。 先来看一个简单的例子(摘自 django-rest-framework 官网示例),理解序列化器的工作原理和功能。...而对于文章关联的 category、author,它们本身也是一个对象,django-rest-framework 就无法推测该使用什么类型的系列化字段来序列化它们了。

    1K20

    等保2.0测评:Redis 数据库配置

    由于本人也不是做运维的,这个Redis数据库是一个缓存数据库,具体怎么用,在项目中怎么部署我不太清楚,这里仅针对于等保的测评要求,对其进行分析如何配置相应的策略。如有不对的地方,欢迎指正哈。...注意:这里没有用户的概念,只能加一个口令验证。 2. 身份鉴别信息具有复杂度并定期更改 没办法满足这个要求,无口令复杂度、最长使用期限设置功能。 这里核查用户当前口令复杂度是否满足要求。...或者使用 redis-cli -h 127.0.0.1 -p 6379 -a “mypass” 进行登录(不建议使用) 因为这样明文密码会留存到 history 里面,不安全。 ?...但是再重启redis后,将会引用配置文件中的口令 b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施 1....f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级 无用户概念。 g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问 做不到。

    3.2K10

    【JavaSE专栏90】用最简单的方法,使用 JDBC 连接 MySQL 数据库

    使用 JDBC 的基本步骤包括,请同学们尝试使用 JDBC。 加载数据库驱动程序:使用 Class.forName() 方法加载 JDBC 驱动程序,将其注册到 JVM 中。...处理查询结果:对于查询语句,使用ResultSet对象获取查询结果,并对结果进行处理。...通过 JDBC,可以将数据从一个数据库迁移到另一个数据库,也可以将数据从一个数据源同步到另一个数据源。 数据库连接池:JDBC 连接池是一种常见的技术,用于管理数据库连接的复用和分配。...通过执行数据库备份命令,将数据库的数据和结构保存到文件中;通过执行数据库恢复命令,将备份文件中的数据和结构恢复到数据库中。...---- 六、总结 本文讲解了如何使用 JDBC 连接 MySQL 数据库,并给出了样例代码,在最后一篇博客中,将讲解如何使用 Java 发起 Http 请求,从而实现与三方网站的整合。

    56120

    Zabbix灾难备份多种方式分享(建议收藏)

    ►对于 Zabbix,有几种不同的备份方法,而一切都是从数据库级别开始的,因为 Zabbix 前端和 Zabbix 服务器都将其数据写入 Zabbix 数据库中,如下图所示: ►这意味着我们的配置以及收集的所有监控数据都保存在同一个...记住所需的表,并使用内置工具进行: ►然后我们可以通过将文件加载进 postgres 来恢复: 配 置 文 件 ►一旦我们有了数据库备份,一切就都被备份了吗?差不多吧。...►让我们将以下内容添加到 cron 中: ►在这里还添加了一个 find 命令,它将查找超过180天的文件,并将其从 /mnt/backup/config_files/ 中删除。...如果选择了多个配置时,请注意它们都将被导出并保存到同一个文件中。...但它是另一种形式的备份,即如果 Zabbix 服务器的一个实例发生故障,另一个实例将接管代替它。HA 在本文中有些超出范围,但仍值得一提。

    1.3K30

    Redis特性和应用场景

    数据超过内存,使用swap,保证数据; memcacache不能持久化,mongo是部分在内存; 自动操作 Redis对不同数据类型的操作是自动的,因此设置或增加key值,从一个集合中增加或删除一个元素都能安全的操作...案例: 在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。...返回所有给定集合的并集 sunion set1 set2 sunionstore 返回所有的并集并且存储到另一个集合中,返回影响的元素个数 sunionstore destSet myset1 myset2...无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。...SQL数据库(或是硬盘上的其他类型数据库)只是在用户需要获取“很远”的数据时才会被触发,而主页或第一个评论页是不会麻烦到硬盘上的数据库了。

    1.9K70

    Redis特性和应用场景

    数据超过内存,使用swap,保证数据; memcacache不能持久化,mongo是部分在内存; 自动操作 Redis对不同数据类型的操作是自动的,因此设置或增加key值,从一个集合中增加或删除一个元素都能安全的操作...案例: 在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。...返回所有给定集合的并集 sunion set1 set2 sunionstore 返回所有的并集并且存储到另一个集合中,返回影响的元素个数 sunionstore destSet myset1 myset2...无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。...SQL数据库(或是硬盘上的其他类型数据库)只是在用户需要获取“很远”的数据时才会被触发,而主页或第一个评论页是不会麻烦到硬盘上的数据库了。

    1.4K70

    Redis服务器命令教程汇总

    10 COMMAND COUNT 获取Redis命令的总数 11 COMMAND GETKEYS 提取键给出一个完整的Redis的命令 12 BGSAVE 将数据集异步保存到磁盘 13 COMMAND...使用内存中配置来重写配置文件 16 CONFIG SET parameter value 将配置参数设置为给定值 17 CONFIG RESETSTAT 重置由INFO返回的统计信息 18 DBSIZE...返回所选数据库中的键数量 19 DEBUG OBJECT key 获取有关键的调试信息 20 DEBUG SEGFAULT 使服务器崩溃 21 FLUSHALL 从所有数据库中删除所有键 22 FLUSHDB...删除当前数据库中的所有键 23 INFO [section] 获取有关服务器的信息和统计信息 24 LASTSAVE 获取上次成功保存到磁盘的UNIX时间戳 25 MONITOR 监听服务器实时接收的所有请求...host port 使服务器成为另一个实例的从属,或将其提升作为主服务器 30 SLOWLOG subcommand [argument] 管理Redis慢查询日志 31 SYNC 用于复制的命令 32

    41800

    云数据库MySql故障切换下的应用重连配置最佳实践

    ,详见下文-数据库驱动 2、 建立数据库连接,数据库url、port、database、用户名、密码等信息 3、 操作执行Sql,增删改查 4、 操作获取Sql数据,查询数据,执行结果 5、 关闭数据库连接...通过使用数据库驱动程序,开发人员可以轻松地在应用程序中连接和操作数据库,无论是在Java、Python还是其他编程语言中。...DBUtils 套件实现为一个 Python 包,包含两个模块子集,一个用于任意 DB-API 2 模块,另一个用于经典 PyGreSQL 模块。...超过此限制,新的数据库操作将等待现有操作完成,此时sql.DB将创建另一个连接。默认情况下,sql.DB当需要连接时,只要所有现有连接都在使用中,就会创建一个新连接。...在某些系统中,例如使用负载平衡数据库服务器的系统,确保应用程序不会在不重新连接的情况下长时间使用特定连接会很有帮助。

    54310

    技术日志挑战——第21天:0813

    比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。...2、一致性(Consistency)事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。...比如账户A和账户B两者的余额加起来总共是5000,那么不管A和B之间如何转账,转账几次,事务结束后两个账户的钱相加起来最终还是5000。...3、隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间,要相互隔离。...4、持久性(durability)一旦事务提交,那么数据的状态就会被永久的保存到数据库中。即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态。

    10710

    Django rest framework源码分析(1)----认证

    一、基础 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一些知识 理解下面两个知识点非常重要,django-rest-framework...(返回token并保存到数据库) from django.shortcuts import render from django.http import JsonResponse from rest_framework.views...如果用户名和密码正确的话  会生成token值,下次该用户再登录时,token的值就会更新  数据库中可以看到token的值 ? 当用户名或密码错误时,抛出异常 ?...内部会将这两个字段赋值给request,以供后续操作使用 return (token_obj.user,token_obj) #例子中的return 当都没有返回值,就执行self....默认是去全局配置文件中找,所以我们应该在settings.py中配置好路径 api_settings源码 api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS

    2.1K122

    【Java 进阶篇】MySQL 事务详解

    事务是一种用于处理多个数据库操作的机制,常常应用于以下场景: 银行转账:如果从一个账户扣除金额并将其存入另一个账户,必须确保两个操作都成功或都失败,以防止资金丢失。...; -- 或者使用 BEGIN; 4.2 提交事务 要提交一个事务,使用COMMIT语句: COMMIT; 提交事务将使所有更改永久保存到数据库。...4.3 回滚事务 要回滚一个事务,使用ROLLBACK语句: ROLLBACK; 回滚事务将撤销所有未提交的更改。 5. 事务的示例 下面是一个简单的示例,演示如何在MySQL中执行事务。...假设有一个银行数据库,包含了两个表:accounts用于存储账户信息,transactions用于存储交易记录。我们想要执行一个事务,从一个账户扣除金额并将其存入另一个账户。...如果在执行这个事务期间发生了错误,可以使用ROLLBACK语句来回滚事务,以确保不会影响数据库的一致性和完整性。 6. 总结 事务是数据库管理中的重要概念,用于确保数据的一致性和完整性。

    29130

    服务降级方案

    开关可以存放到配置文件、存放到数据库、存放到Redis/ZooKeeper;如果不是存放在本地,可以定期同步开关数据(比如1秒同步一次)。然后通过判断某个KEY的值来决定是否降级。...还有多机房服务,如果某个机房挂掉了, 此时需要将一个机房的服务切到另一个机房,此时也可以通过开关完成切换。...页面降级、页面片段降级、页面异步请求降级都是读服务降级,目的是丢卒保帅(比如因为这些服务也要使用核心资源、或者占了带宽影响到核心服务)或者因数据问题暂时屏蔽。...首页、频道页都可以这么玩; 可以通过一个程序定期的推送静态页到缓存或者生成到磁盘,出问题时直接切过去; 静态化降级为动态化:比如当使用静态化来实现商品详情页架构时,平时使用静态化来提供服务...以上都保证出问题了有预案,用户还是可以使用网站,不影响用户购物。 写服务降级:写服务在大多数场景下是不可降级的,不过可以通过一些迂回战术来解决问题。

    1.9K20

    京东价格保护高并发 | 七步走保证用户体验

    >>>> 化繁从简 在高并发情况下,需要快速响应,当请求过程中,获取过多的数据,则有可能会降低响应速度,因此要将处理简单化,只做黄金流程即可。 ?...>>>> 处理无极限 经过上面的几步,用户可正常的打开页面,提交商品价格保护申请,那么如何能将这巨大的申请量全部吃下,并迅速的返回,成了我们系统的一大难题。...处理的慢,就有可能获取当时促销价不准确,导致用户价保失败,用户体验会急剧下降。 下面我们将演示如何从有极限到无极限: ? 图 – 有极限 大家看,为什么上图是有极限呢?...我们业务接单集群,只做业务处理,保存到业务DB集群,通过业务WK集群,将任务下发到JMQ中间件,任务流程处理SV集群进行消息监听,将消息分库插入到流程处理DB中,每个流程处理DB都会对应一套任务处理WK...这样无论业务申请如何大,我们任务处理都可以随时扩展。 >>>> 速战速决 在上述“处理无极限”中,我们已经可以随时扩展,那么怎么才能最快的任务处理呢?

    1.9K30
    领券