四 存储相关MySQL&Redis&ES&MQ
文章平均质量分 57
存储相关
陈于晏8
一天进步一点点,加油!
展开
-
工作用到的杀手锏-Redis
背景一个专门用来提供服务的系统离不开缓存,因为每一个功能请求的链路中会去数据库获取一些常规的信息,比如这个应用id的终端信息,应用信息,应用权限信息,商户配置信息,卡信息等等,大部分的高并发场景都是读多写少,redis(写8万,读11万)这些信息写入缓存来抗高并发。有一些基本不变的信息还可以使用二级缓存如:Caffeine + Redis。Redis基础Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。支持多种数据结构。Redis内置了replication、原创 2021-11-13 21:04:19 · 997 阅读 · 0 评论 -
近期工作中关于优化SQL的总结
索引失效建了索引用Explain分析SQL发现没用上,难道是索引失效?索引失效的大部分情况都没有出现。之后才发现两张表的编码格式不一样也会导致索引失效。还有就是字段编码格式不一致也会失效。用上索引的思路有一个统计单张表的某个维度的接口,该表的crt_date为yyyymmdd格式,该张表有索引(crt_date),正常来说我们都是只是count就行,那么如何优化呢?我们可以在业务层先查找出来该张表最早的创建时间放入redis缓存,之后用上索引crt_date即可。order by 分页出现的原创 2021-11-10 22:48:32 · 516 阅读 · 0 评论 -
RocketMQ 概念
RocketMQ介绍简介RocketMQ是一款分布式、队列模型的消息中间件。特点单机吞吐量:十万级 可用性:非常高分布式架构 支持10亿级别的消息堆积,不会因为堆积导致性能下降 能够保证严格的消息顺序 提供丰富的消息拉取模式 实时的消息订阅机制 支持上万个队列 消息失败重试机制关键概念主题与标签主题Top: 第一级消息类型,书的标题 标签Tags:第二级消息类型,书的目录,可以基于Tag做消息过滤ps: 主题Top: 订单交易 标签Tags:订原创 2021-10-02 23:38:03 · 363 阅读 · 0 评论 -
如何利用Redis实现分布式锁?
为什么需要分布式锁?系统是单机版,那么是在同一个JVM虚拟机内,使用synchronized或者Lock接口,就可以锁住当前线程,保证共享变量的正确性,其使用范围是在同一个进程内。 系统是微服务架构,synchronized和Lock不再起作用,资源类在不同的服务器之间不能共享了,所以需要分布式锁来解决这个问题。想要实现分布式锁,必须借助外部系统(redis或者Zookeeper)...原创 2021-09-19 16:25:00 · 289 阅读 · 0 评论 -
学妹问我redis分布式锁是什么
原创 2021-09-13 00:19:47 · 82 阅读 · 0 评论 -
给学妹说说什么是布隆过滤器
原创 2021-09-07 23:47:30 · 70 阅读 · 0 评论 -
缓存惹的祸
缓存惹的祸背景项目A遇到某些条件的情况下需要把某些消息推送至项目B,推送方式跟项目B负责人约定好后采用httpclient方式;数据库里有一张配置表专门来配置推送的url、appId等信息,配置好后开始开发。过程与项目B负责人约定好了推送模板后开始开发。这里为了提高响应速度,当项目A遇到某些条件下开始推送消息(采用线程的方式)推送类有这几个部分组成: 定义ThreadPoolExecutor线程池 Redis缓存获取配置信息 推送消息方法 开发好后本地调原创 2021-09-05 16:57:48 · 97 阅读 · 0 评论 -
Redis 缓存穿透 & 解决思路
背景在项目中,有一个注册电子健康卡的服务,用户注册电子健康卡时候,都要携带外部流水号来进行注册。我们的需求是并发情况下不能让流水号重复。由于每次每个请求都要去判断流水号是否重复,就要去数据库查询实体是否存在,并发情况下导致数据库压力较大,就引入了Redis来减少去请求数据库的次数。使用Redis就会出现缓存穿透的问题。缓存穿透缓存穿透是指缓存和数据库中都没有的数据,用户不断发起请求,我们的数据库不存这些数据时候,这时候用户很可能是攻击者,攻击就会导致数据库压力过大,严重击垮数据库。原创 2021-08-07 18:09:24 · 131 阅读 · 0 评论 -
Docker安装RocketMQ
Docker安装RocketMQ1.0 背景由于自己的电脑vnp不能连公司的vpn,所以在家运行项目不方便,打算给自己的linux安装RocketMQ。2.0 拉取镜像docker pull rocketmqinc/rocketmq:latest2.1 创建目录/usr/local/docker/rocketmq/data/namesrv/logs/usr/local/docker/rocketmq/data/namesrv/store2.2 安装namesrv..原创 2021-07-20 22:50:28 · 359 阅读 · 1 评论 -
Sharding-JDBC分表实践
一 Sharding-JDBC分表实践1.0 背景这周问了小组长有任务吗?组长说暂时没有任务了,让我了解下分表技术。原因是因为随着公司发展,用户量大量增加,业务也越来越繁杂。一张表的字段有几十个上百个,一张表存储的数据也很多。这样数据库的压力就比较大了。之后我便打开了我的B站,开始了解一波。2.0 垂直分表、垂直分库(表和库都是不一样的)2.1 垂直分表 一般将不常用的、数据较大、长度较长的拆分到"扩展表"。 2.2 垂直分库 一个数据库的表太多,按照一定业务逻辑原创 2021-07-16 17:43:29 · 216 阅读 · 1 评论 -
验证码redis实践总结
一 验证码+redis应用设计思路1.0 背景最近在开发辽事通机构开放管理平台入驻功能模块功能。该模块涉及到注册、登录、入驻等功能。涉及到的技术有SpringBoot、Mybatis、Spring Security、Jwt、Npm、vue-cli、vue-router、vuex、element-ui1.1 验证码生成思路后端思路:a.将验证码存入redis,(键 值 时间 单位)其中键由常量+uuid拼接,值由随机生成4个字符串,时间为2分钟。b.利用BufferedIm原创 2021-07-11 17:03:51 · 1470 阅读 · 0 评论 -
京东搜索引擎技术-Elasticsearch快速入门
一.简介Elasticsearch是一个基于Lucence的搜索服务器。它提供了一个分布式的搜索引擎,基于restful web接口。广泛应用于云计算中,能够实时搜索,具有稳定,可靠,快速的特点。二.为啥要学习Elasticsearch?它其实也是一种数据库的优化方案,它的强大之处在于模糊查询。如果是普通数据库查询 like%xxxx%,其实是不走索引的。只要你的数据库的量很大,你的查询肯定会是秒级别的。(es搜索速度很快)用户输入其实没那么精确或者打错,Elasticsearch却能返回用原创 2021-01-02 00:54:16 · 1665 阅读 · 0 评论 -
Mysql-03.工作中对SQL优化的心得体会
1.使用explain分析sqlexplain+sql就可以开始分析sql啦,下面介绍一些比较重要的字段1.1 typeconst 通过索引一次就找到了(最好)eq_ref 是用来唯一性索引(primary key或者unique index)ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值range 单表索引中的范围查询index 比all好点all 全表扫描(最差)SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts最好原创 2020-12-27 11:16:38 · 165 阅读 · 2 评论 -
MySQL-02.工作中对索引的理解
索引1.什么是索引?帮助MySQL高效获取数据的数据结构相当于目录,是一个文件,需要占据物理空间的2.使用场景where 后面字段,对该字段建立索引(alter table 表名 add index(字段名))。order by 后面的字段,如果没有建立索引,执行计划会将查询出的所有数据使用外部排序,影响性能,使用排序之后,索引本身是有序的,因此直接按照索引的顺序和映射关系逐条取出数据即可。对join语句匹配关系on涉及的字段建立索引提高效率。尽可能的在select后只写必要的查询字段原创 2020-12-26 14:24:22 · 123 阅读 · 0 评论 -
MySQL-01.工作中数据库优化和explain字段知识的总结
数据库优化-话题为什么要优化?系统的吞吐量瓶颈往往出现在数据库的访问速度上数据库中的数据越来越多,处理时间会相应变慢优化原则:减少资源占用,增加系统的反应速度0.Redis缓存减少数据库连接是一种优化手段,有些查询可以不用访问数据库,可以通过缓存服务器redis,elasticsearch增加缓存,减少数据库的连接。1.主从复制,读写分离通过MySQL主从复制,curd走master服务器,查询走slaver从服务器,这样就减少了只有一台MySQL服务器的压力。2.数据库参数配置优化原创 2020-12-26 11:15:36 · 131 阅读 · 0 评论 -
MySQL基础-笔记
一.值和列类型1.数值类型2.字符串类型3.日期和时间数值类型4.null值理解为“没有值”或“未知值”不要用NULL进行算术运算,结果仍为NULL二.数据字段属性1.Unsigned无符号声明该数据列不允许负数2.Zerofill不足位数的用0来填充,如int(3),5则为0053.Auto_InCrement通常用于设置主键,且为整数类型,自动增长的可定义起始值和步长SET @@auto_increment_increment=5,影响所有使用自增的表原创 2020-12-24 22:09:00 · 63 阅读 · 0 评论 -
【Redis】11.缓存穿透和雪崩
一.缓存穿透(查不到)用户很多的时候,缓存都没有命中(秒杀),于是都去请求了持久层数据库。这会给持久层数据库造成了很大的压力,相当于出现了缓存穿透。解决方案:1.布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力2.缓存空对象,当存储层不命中时候,将返回的空对象也将其缓存起来,同时设置一个过期时间,保护了后端数据源。二.缓存击穿(量太大,缓存过期)缓存击穿是指一个key热点(原创 2020-11-06 21:32:20 · 90 阅读 · 2 评论 -
【Redis】10.哨兵
一.为什么要用到哨兵?刚刚前面提到了主从复制,当时是手动输入命令来配置的,费时费力。所以Redis从2.8开始正式提供了Sentnel(哨兵)架构来解决这个问题。二.原理哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。三.作用通过发送命令,让Redis服务器返回监控其运行状态 当哨兵检测到master宕机,会自动将slave切换回master,通过发布订阅模式通知其他的从服务器,修改配置文件,让他们切换主机四.多哨兵模式五.简单测试原创 2020-11-05 22:06:31 · 230 阅读 · 4 评论 -
【Redis】9.主从复制
一.为什么要使用主从复制?数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式 故障恢复:当主节点出现问题时候,可以由节点提供服务,实现快速的故障恢复 负载均衡:在主从复制的基础上,配合读写分离,写Redis时候应用连接主节点,读Redis数据时应用连接从节点,大大提高Redis服务器并发量 高可用基石:哨兵和集群实施的基础二.Redis集群环境搭建修改配置文件中的1.端口2.pid名字3.dump.rdb名字 开启服务三.一主二从79(80,81)主机原创 2020-11-05 20:59:35 · 96 阅读 · 0 评论 -
【Redis】8.持久化RDB、AOF
一.什么是持久化持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。二.RDB(Redis DataBase)2.1RDB是Redis默认的持久化方式按照一定的时间将内存中的数据以快照的形式保存到磁盘中去,对应产生的文件为dump.db。(可以在上一篇redis.conf中查看对应的save参数,save参数决定快照的周期)2.2高性能Redis会单独创建(fork)一个子进程来进行写操作,让主进程继续处理命令,所以是IO最大化。使用单独子进程来进行持久原创 2020-11-03 21:53:19 · 137 阅读 · 0 评论 -
【Redis】7.redis.conf学习
NETWORK——网络bind 127.0.0.1 #绑定的ipprotected-mode yes #保护模式 开启该参数后,redis只会本地进行访问,拒绝外部访问port 6379 #端口设置GENERAL——通用daemonize yes # 以守护进程的方式运行,后台运行pidfile /var/run/redis_6379.pid #当redis以守护进程方式运行时,默认写入pid的文件及路径loglevel noticelogfile "" # 日志的文件位置名 d..原创 2020-11-03 20:27:05 · 168 阅读 · 0 评论 -
【Redis】自定义RedisTemplate
一.为什么需要序列化?1.没有序列化的情况:报错,所有对象需要序列化2.RedisTemplate默认是jdk序列化从下图中可以看出redistemplate默认的是jdk的序列化所以我们需要config去配置我们要的序列化具体方式。二.如何配置序列化1.具体的序列化方式有这些2.固定模板-自定义RedisTemplate@Configurationpublic class RedisConfig { @Bean @SuppressWarn原创 2020-11-01 15:24:12 · 1017 阅读 · 0 评论 -
【Redis】watch监控、实现乐观锁
一.乐观锁和悲观锁的概念悲观锁: 很悲观,认为什么时候都会出问题,所以在每次拿数据的时候都会上锁其他线程想要访问数据时候,都需要阻塞挂起。Java中synchronized的思想也是悲观锁。乐观锁:很乐观,认为什么时候都不会出现问题,更新数据的时候去判断一下,在此期间是否有人修改过这个数据。二.Redis监视测试watch正常执行成功测试多线程修改值,使用watch可以当做乐观锁的操作如果修改失败,获取最新的值就好 unwatch,之后再次监视...原创 2020-10-31 21:23:14 · 1154 阅读 · 0 评论 -
【Redis】事务不保证原子性、没有隔离级别
一.回顾mysql事务四大属性原子性(Atomicity)原子性是指事务包括的所有操作要么成功,要么全部失败回滚 一致性(Consistency) 事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性。 隔离性(Isolation)多个并发事务之间要相互隔离 持久性(Durability)事务一旦被提交了,对数据库中的数据是永久性的二.原创 2020-10-31 20:31:26 · 1430 阅读 · 0 评论 -
【Redis】5大数据类型
1.测试性能在我们安装usr/local/bin 目录下有一个redis-benchmark,是一个压力测试工具。2.基础知识3.Redis-Key4.String(字符串)5.List(列表)indexlrem 移除指定的值 取关lrem 移除指定的值 取关lsetlinsert5.Set(集合)6.Hash(哈希)本质和String类型没有太大区别,hash更适合对象的存储,String更加适合字符串存储。7.Zset(有序集合).原创 2020-10-28 16:26:01 · 213 阅读 · 0 评论 -
【Redis】Mac安装Redis
1.什么是Redis?Remote DIctionary Server(Redis) ,即远程字典服务,是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是当下最热门NoSQL技术之一。被人称之为结构化数据库。2.能干什么?内存存储、持久化、内存中是断点即失去,持久化很重要(rdb、aof)效率高,原创 2020-10-22 21:07:10 · 450 阅读 · 0 评论 -
【redis】高可用:keepalived+redis
redis高可用:keepalived+redis具备的条件:部署好 【Redis Master-Slave + Keepalived 】 Keepalived安装参考郑哥Tengine+Keepalived部署手册1.先验证redis主从 参考 恩华redis集群部署.doc分别在139主140从 开启redis服务cd /usr/local/redis/redis-5.0.5执行...原创 2019-12-13 08:48:18 · 748 阅读 · 0 评论