“ 在软件系统中,IO速度比内存速度慢,IO读写在很多情况下会是系统的瓶颈,我们也知道Redis的查询速度比直接查数据库要快,因为Redis将数据存在内存中,而Mysql的查询是执行IO操作。 今天给大家带来的是,Mysql和Redis在项目中的查询速度的差距。 01 — 实例 首先我们看一张图片: ? 用一个例子来说明这种效果代表着什么: 人眼的反应速度大约是十分之一秒,或者更高,但最高不超过三十左右。一般认为在24分之一。反应时间。 也就是说100ms左右的加载速度,人眼看到的基本上就是秒加载了。 这里的对比并不是说Mysql不好,而且这个对比也是有一定的问题,因为本人的SQL查询语句可能优化并不是特别好。 好了,既然我们知道Redis查询速度要比直接查询Mysql要快,那么如何合理的在项目中运用Redis呢?请继续关明天的文章,今天就讲到这里,希望大家能有一个充实的一周。
这意味着通常情况下 Redis 客户端执行一条命令分为如下四个过程: 发送命令 命令排队 命令执行 返回结果 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。 Redis 很早就支持 Pipeline 技术,因此无论你运行的是什么版本,你都可以使用 Pipeline 操作 Redis。 Pipeline 能将一组 Redis 命令进行组装,通过一次 RTT 传输给 Redis,再将这组 Redis 命令按照顺序执行并将结果返回给客户端。 我们可以从上表中得出如下结论: Pipeline 执行速度一般比逐条执行要快。 客户端和服务端的网络延时越大,Pipeline 的效果越明显。 5. 参考: Using pipelining to speedup Redis queries Redis开发与运维
提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。
如果RTT的时间为250ms(假设互联网连接速度很常慢),即使Server可以每秒处理100k个请求,那么最多也只能接受每秒4个请求。 比如多POP3协议的实现就支持这个特性,大大的提升了从server端下载新的邮件的速度。 基于此,随着管道的长度增加,每秒执行的查询数量最开始几乎呈直线型增加,直到不使用pipelining技术的基准的10倍,如下图所示: Some real world code example 不翻译 真实的情景是系统内核调度,调度到进程运行,它才会运行。比如测试基准benchmark被允许运行,从Redis Server中读取响应内容,并且写了一个新的命令。 这时命令将在回环网络的套接字中,但是为了被Redis Server读取,系统内核需要调度Redis Server进程,周而复始。
在设计数据库时,三范式能够最大限度的节省 数据库存储所需的空间,可是缺点是 在查询,修改等操作时,会造成查询缓慢,效率低下。 冗余字段添加条件:经常进行查询的字段放在同一个表中,避免多表查询 2.数据查询时,少用in进行查询 in进行的是全表查询,不使用索引 For instance: 用关联查询: ? ? 3.尽量少设置外键关联 在项目初期进行版本迭代时,对于以后版本无法预测的变更,尽量少使用外键关联,减少表间依赖强度,为以后版本设计提供基础。因为外键关联时,修改删除等操作非常繁杂。 比如 国家免检产品,在保证产品质量(本表)的前提下,充分相信制造商(外键对应的表) 4.使用redis缓存机制 对于重复查询,没有改变的数据,可以使用redis缓存机制,直接访问内存数据,不再访问数据库 思路是:读取数据库数据到redis缓存中,从redis中取数据给前端。如果涉及到数据修改不大的,可以修改到redis中,固定时间同步到数据库,保证数据统一完整性。
MySQL 中存在慢查询,Redis 中也存在慢查询,Redis 的慢查询是命令执行超过设定阈值的查询就是慢查询。我们来整理一下。 慢查询 Redis 会记录命令执行时间超过设定阈值时间的命令,这里的慢查询说的是命令执行慢,并非是 I/O 慢。 ? config 命令可以动态的获取和设置 Redis 服务器的部分参数,通常我们查看和设置参数是进入 redis.conf 这个文件中,但是在运行时可以通过 config 命令来快速的获取和设置参数。 上面两个配置是关于慢查询的配置,关于慢查询的命令 Redis 提供了 slowlog 的命令,该命令可以提供一些参数,介绍如下。 Redis 记录的慢查询数量 通过 slowlog len 命令来查看记录了多少条慢查询命令。
使用索引提高查询速度 1.前言 在web开发中,业务模版,业务逻辑(包括缓存、连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈。 而优化数据的重要一步就是索引的建立,对于Mysql出现的慢查询,可以用索引提升查询速度。 ,数据库利用各种各样的快速定位技术,能够大大提高查询效率。 特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。 但是索引查询就是如此了。。。 ?
慢查询日志就是系统在命令执行前后计算每条命令的执行时间,但超过预设阈值时,会将这条命令的相关信息(执行时间 执行耗时 命令的详细信息)记录下来。 设置慢查询时间阈值 slowlog-log-slower-than就是预设的阈值,单位是微妙 默认是10000微妙,如果超过阈值就会被记录在慢查询日志中,lowlog-log-slower-than = slowlog-max-len 慢查询日志最多存储多少条,redis 使用一个列表来存储慢查询日志,slowlog-max-len 就是列表最大长度 slowlog-log-slower-than OK 127.0.0.1:6379> config set slowlog-max-len 1000 OK 127.0.0.1:6379> config rewrite slowlog get 获取慢查询日志 slowlog get [n] 可选参数指定查询条数,慢查询日志由4个属性组成,分别是慢查询日志的id,执行命令的时间戳,执行命令的耗时,具体的执行命令和参数 1) (integer) 1104
由于业务迁移,需要将大量文件拷贝到目标机器上的/mnt目录,在拷贝过程中,想要查看上传的速度,做法如下: [root@mail01 ~]# du -sh /mnt 5.6G /mnt [root@mail01 Every 1.0s: du -sm /mnt/ Tue Dec 12 19:16:34 2017 5862 /mnt/ #通过这一行实时刷新的信息就能看出文件上传的速度了 -h, --help 查看帮助文档 4)使用实例: 实例1:每隔一秒高亮显示网络链接数的变化情况 [root@mail01 ~]# watch -n 1 -d netstat -ant 说明:切换终端 实例3:实时查看模拟攻击客户机建立起来的连接数 [root@mail01 ~]# watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l' /data的上传速度(上传操作还在进行中) [root@mail01 ~]# watch -n1 'du -sm /data/'
redis 慢查询 什么是慢查询 MySQL会记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询,都记在慢查询日志里。 redis 的生命周期 客户端向Redis服务器发送命令 命令请求在请求队列中排队等待处理 执行命令 返回命令结果 ? redis 慢查询 慢查询发生在生命周期的第三阶段,是指仅仅执行命令阶段比较慢被称为慢查询。 客户端超时不一定是慢查询,但是慢查询时是客户端超时的一个可能因素。 redis 慢查询相关配置 1. slowlog-max-len 它决定了慢查询日志最多能保存多少条日志,slow log本身是一个内存中的FIFO队列,当队列大小超过slowlog-max-len时, n] 含义:获取慢查询列表中的慢查询信息 2. slowlog len 含义:获取慢查询队列长度 slowlog reset 含义:清空慢查询队列 慢查询运维经验 slowlog-max-len 不要设置过大
为了便于给公司的研发查询redis数据,github上找到一个不错的项目 https://github.com/andyzsf/PyRedisAdmin 默认是不带登录账号控制和可以修改数据的,我们上生产前做了些改动
备注:上面介绍的慢查询指的是步骤3的时间,也就是Redis命令的执行时间,所以在Redis中慢查询的时间和客户端的超时时间根本不是一回事。 而showlog-max-len参数,就是该列表的最大长度。当慢查询中的记录数超过了showlog-max-len参数时,那么Redis会将该列表中最先存储的信息删除。 ---- 2.获取慢查询日志列表当前的长度 slowlog len ? ---- 3.慢查询日志重置 slowlog reset ? slow-max-len参数:因为当Redis中慢查询的信息过多时,Redis会清除之前的慢查询列表中的信息,所以为了必免Redis有频繁清除过多慢查询信息的可能,slow-max-len参数相对来说可以设置的大一点 因为慢查询的信息是被记录到了Redis中的一个列表中,并且是先进先出的。所以当Reids中的慢查询过多时,曾经记录的慢查询信息则会被删除。
一、什么是慢查询日志? slow log是Redis用来记录查询执行时间超过给定时长的命令请求的日志系统。许多数据库(如:MySQL)提供慢查询日志帮助开发与运维人员定位系统存在的慢操作。 log保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启slow log而损害Redis的速度。 二、Redis命令执行流程: 1、发送命令 2、命令排队 3、命令执行 4、返回结果 注意:慢查询只统计步骤3的时间,所以没有慢查询并不代表客户端没有超时问题。换句话说。 redis的慢查询记录时间指的是不包括像客户端响应、发送回复等IO操作,而单单是执行一个查询命令所耗费的时间。 : 1、slowlog-max-len:线上建议调大慢查询列表,记录慢查询时Redis会对长命令做阶段操作,并不会占用大量内存.增大慢查询列表可以减缓慢查询被剔除的可能,例如线上可设置为1000以上.
Redis慢查询日志 Redis慢查询日志功能是用于记录执行时间超过给定时长的命令请求,可以通过查看慢查询日志来监控和优化查询速度 慢查询配置相关的参数 slowlog-log-slower-than: 可以发现我的服务器配置的慢查询日志的时间的10ms,慢日志的条数是 128 慢查询记录 通过 slowlog get 查看慢查询日志是什么样子?【从其他redis服务器看的】 ? 设为0,这样任何redis的命令都会被当做慢查询命令添加到慢查询日志中 把 slowlog-max-len 设为 2,这样慢查询日志大小为2 配置完后,看下图 ? 在客户端发送3条redis的命令,这样就能验证删除逻辑 先发送2条命令,然后看下慢查询日志,如下图所示 ? 可以发现慢查询日志中,已经没有了 set str1 '1' 和 set str2 '2',验证了慢查询日志删除遵循 先进先出 通过实验验证了 redis 的慢查询记录采用 先进先出 的方式删除,那么我们通过
来源:http://t.cn/RnU0h2o 1 影响数据库查询速度的四个因素 2 风险分析 3 网卡流量:如何避免无法连接数据库的情况 4 大表带来的问题(重要) 5 大事务带来的问题(重要) --- - 1 影响数据库查询速度的四个因素 ? 2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 (重要) 4.1 大表的特点 记录行数巨大,单表超千万 表数据文件巨大,超过10个G 4.2 大表的危害 1.慢查询:很难在短时间内过滤出需要的数据 查询字区分度低 -> 要在大数据量的表中筛选出来其中一部分数据会产生大量的磁盘 ,再在库上执行) 修改表结构需要长时间的锁表:会造成长时间的主从延迟('480秒延迟') 4.3 如何处理数据库上的大表 分库分表把一张大表分成多个小表 难点: 分表主键的选择 分表后跨分区数据的查询和统计
可以使用slowlog len命令获取慢查询日志的长度,比如: > slowlog len (integer) 121 在上例中,当前Redis中有121条慢查询日志。 如何清理慢查询日志? 实际上,Redis使用了一个列表存放慢查询日志,slowlog-max-len就是这个列表的最大长度。当一个新的命令满足满足慢查询条件时,被插入这个列表中。 当慢查询日志列表已经达到最大长度时,最早插入的那条命令将被从列表中移出。 记录慢查询是Redis会对长命令进行截断,不会大量占用大量内存。在实际的生产环境中,为了减缓慢查询被移出的可能和更方便地定位慢查询,建议将慢查询日志的长度调整的大一些。比如可以设置为1000以上。 总结 慢查询指的是命令执行时长比较长的查询。通过slowlog get命令获取慢查询日志;通过slowlog len命令获取慢查询日志的长度;通过slowlog reset命令清理慢查询日志。
value1', { value2: '3' } ] } 在线测试地址 基于JS-YARML : nodeca.github.io/js-yaml/ 官方提案 yaml一直在更新,包括更复杂的姿势 具体骚的程度看不同语言实现的支持程度
位置信息由一个四元组构成,(经度、纬度、海拔、时间),在使用过程中比较常用的是经纬度。想要进行相邻计算,需要一个二维索引。 问题是现有的基于简单的一维索引和划范围搜索实现的二维索引,基本只适用于整数查询,并不适用于经纬度这种位置的相似度查询 NoSQL中,Mongodb对位置服务的支持较好,稳定地支持了foursquare等应用 作为优秀NoSQL数据库的典范,Redis在位置计算方面却略显薄弱。 发布之后,获得领域内的一致认可,短短几个月收获多达1万3千余个星标,有人进一步贡献了Redis Geo的Docker镜像 Redis Geo的细节可以参考antirez给出的文档页面(https://matt.sh /redis-geo),其中包括了Redis Geo的基本使用,例如添加经纬度、计算经纬度相似度、计算城市之间的包含关系等多种位置计算功能。
跟众多数据库的慢查询一样,平时不希望看到,但是数据库响应慢的时候,又希望能在慢查询中找到罪魁祸首。这一节内容,就来简单聊聊如何在 Redis 中找到慢查询。 参数 slowlog-max-len 可以控制保存慢日志的条数,Redis 底层是使用列表来存储慢查询日志,slowlog-max-len 就是列表的最大长度。 当慢查询数达到该参数配置的值时,如果继续有新增的慢查询,则最早插入的慢查询会被删除。 : 127.0.0.1:6379> slowlog reset OK Redis 慢查询注意点: 慢查询只记录命令执行时间,并不包括命令排队和网络传输时间; 生产环境 slowlog-max-len 可以配置 1000 以上,方便我们查看,Redis 记录慢查询时,会对长命令做截断操作,并不会占用过多内存; slowlog-log-slower-than 默认为 10000,对 QPS 要求更高的场景,可把
Redis 列存储。HBase 文档数据库。MongoDB 图形数据库。 NoSQL特点 易扩展 大数据量,高性能 灵活的数据模型 高可用 Redis概述 支持的键值数据类型 字符串(String) 散列(hash) 列表(list) 集合(set) 有序字符串集合(sorted Value最大512MB 命令 赋值 set 取值 get 删除 del 数值增减 incr, decr, incrby(+数字), decrby(++数字) 扩展命令 append(返回的事字符串长度) 看0到5的元素,可为负数表示从右边数起 lpop mylist头部弹出 rpop mylist尾部弹出 lpush mylist a b c rpush mylist a b c 两端添加 两端弹出 查看列表 zadd mysort zrangebyscore mysore0100withscores limit02 zincrby mysort3ls 场景: 大型在线游戏积分排行榜 检索索引数据 通用操作 查看
5、分析Oracle的执行计划,通过表数据统计等方式协助数据库走正确的查询方式,该走索引就走索引,该走全表扫描就走全表扫描。 8、字段冗余,减少跨库查询和大表连接操作。 9、数据通过单个或多个JOB生成出来,减少实时查询。 10、从磁盘上做文章,数据存放的在磁盘的内、外磁道上,数据获取的效率都是不一样的。
云数据库 Redis,数据库缓存,数据库存储,云数据库 云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。 云数据库Redis是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
扫码关注云+社区
领取腾讯云代金券