数据库
文章平均质量分 68
小辉笔记
热爱编程,热爱生活
展开
-
MySQL的组成与三种log
记录数据页的物理变化(可以理解为记录的是DML造成的数据diff)开启事务的时候会产生一个视图,存本次事务id,所有活跃的事务id等。事务开始时,获取一个一致性快照,整个事务期间读取的数据视图保持不变。MySQL写操作同步写的是缓存区与redolog,异步写的磁盘。所以可以通过mysql数据+undolog 找到数据的历史版本。数据的事务id属于活跃的事务id 证明当时未提交,不可读。数据的事务id本次事务id 证明未提交,不可读。原创 2024-06-04 02:51:14 · 1081 阅读 · 0 评论 -
密码安全存储
关于现在的密码存储的安全性,有很多需要考虑的问题. 直接明文存储或者 双向加密(可以解密)存储都是不可取的有很多人使用了单向加密的方式-----MD5加密但是MD5加密后的安全性并不高。同样可以解出来因此产生了hash+盐的存储方式MD5加密特性:单向加密,不可以解密。特性:同一个密码每次MD5加密后生成的字符串是相同的基于相同这一个特点,只要枚举所有短密码进行 md5 加密,做成一个索引表,就能轻易的逆推出原始密码hash+盐盐是指随机生成的key很多加密算法都是采用ha.原创 2021-01-04 18:25:15 · 499 阅读 · 0 评论 -
varchar int查询 到底什么情况走索引的问题
结论:表中的字段类型为整型时,无论查询用字符串类型的数字还是int类型的数字均能走索引表中字段类型为字符类型时,查询的值为整型时,无法走索引如果字段做了函数计算后,该列上即使有索引也无法使用(MySQL8.0之前的版本)实验操作# 创建表test1create table test1(id int primary key,c_no int ,c_2 varchar(1),key c_no(c_no));# c_no字段为int类型,下面分别用整型和字符串进行比较,查看是否走索引。对应的.原创 2020-10-18 11:41:53 · 731 阅读 · 1 评论 -
缓存穿透缓存击穿与雪崩
缓存穿透 (查不到导致)用户查询一个数据,缓存中没有就会去持久层数据库中查询,高并发情况下(秒杀),缓存中没有命中,于是都去请求持久层数据库,给持久层数据库造成很大的压力,这个时候就相当于出现了缓存穿透。解决方案布隆过滤器布隆过滤器是一种数据结构,把所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力缓存空对象当持久层数据库不命中时后(数据库中没有),返回一个空对象,并把空对象存储在缓存层中, 下次有用户访问时,则会返回给其一个空对象原创 2020-09-07 21:41:15 · 93 阅读 · 0 评论 -
Redis----哨兵模式/redis-sentinel
哨兵模式 (redis-sentinel)出现问题旧的主从切换的方法:当主服务器宕机后,需要手动将一台从服务器切换为主服务器,费时费力,还会造成一段时间内服务不可用。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题 (自动版)其原理是:哨兵通过发送命令,等待redis服务器响应,从而监控运行的多个redis实例单哨兵模式:哨兵集群模式假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上故障转移,仅仅是哨兵1主观认为主服务器不可用,这个现象称为主观下线,当后面原创 2020-09-07 21:15:52 · 109 阅读 · 0 评论 -
Redis集群搭建以及原理
Redis主从复制概念主从复制:将一台Redis服务器的数据,复制到其他Redis服务器。前者为主节点,后者为从节点。==数据的复制是单向的,只能由主节点到从节点。==主节点已写为主,从节点已读为主主从复制,读写分离。减少服务器的压力 (至少一主二从)默认情况下,单台redis服务器都是主节点,需要进行配置主从复制的作用数据冗余故障恢复复杂均衡高可用(集群)单台redis最大使用内存不应该超过20g127.0.0.1:6379> info replication #查看当原创 2020-09-07 19:13:14 · 105 阅读 · 0 评论 -
Redis---订阅发布(subscribe/publish)
Redis订阅发布(pub/sub)命令命令行演示# 第一个客户端订阅127.0.0.1:6379> SUBSCRIBE superhui #订阅superhui 频道 订阅后可接收到发送信息Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "superhui"3) (integer) 1# 第二个客户端发送127.0.0.1:6379> PUBLISH superhui myfirstMessage原创 2020-09-05 14:32:29 · 442 阅读 · 0 评论 -
redis持久化操作-----RDB和AOF
Redis持久化redis是内存数据库,如果不持久化,断电即失在主从复制中,持久化就是用来备用的RDB持久化RDB的工作流程:在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读入内存里。redis会单独fork(创建)一个子进程来进行持久化,会先将数据写入一个临时文件中,待持久化过程都结束了,再用这个临时文件替换旧的持久化文件。主线程不进行持久化IO操作,性能较高RDB比AOF高效,但最后一次持久化后的数据可能丢失保存文件 默认名dump.rdbdbfil原创 2020-09-05 10:51:36 · 111 阅读 · 0 评论 -
Redis.conf 配置文件超详解
Redis.conf配置文件 unit单位 对大小写不敏感单位# 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes包含 INCLUDES# include /path/to/local.conf# include /pat原创 2020-08-29 11:46:54 · 137 阅读 · 0 评论 -
Spring Boot 整合Redis lettuce
Spring Boot 整合RedisSpring Boot 整合数据通过Spring data 连接的Spring Boot 在2.0之后 Jedis 被替换成了lettureJedis 和 letture比较:Jedis:采用的是直接连接,如果有多个线程操作的话,是不安全的,使用redis pool 连接池 更像BIOletture:采用netty,实例可以在多个线程中共享,不存在线程不安全的情况,可以减少线程数量 更像NIOSpringBoot所有的配置类,都有一个自动配置类 Redi原创 2020-08-29 11:15:18 · 301 阅读 · 0 评论 -
Redis连接开发工具---Jedis
Jedis导入对应的依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> <dependency&原创 2020-08-29 11:13:52 · 260 阅读 · 0 评论 -
Redis---事务基本内容
Redis 事务redis事务是不保证原子性的!单条命令保证原子性redis事务没有隔离级别的概念redis事务的本质:一组命令的集合!一个事务中的所有命令都会序列化,在事务执行的过程中,会按照顺序执行。一次性,顺序性,排他性执行一系列的命令所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!EXECRedis的事务开启事务(multi)命令入队(写命令…)执行事务(exec)正常执行事务!multi #开启事务#命令入队..... #写各个命令原创 2020-08-28 09:27:40 · 81 阅读 · 0 评论 -
Redis---锁机制与监控
Redis没有隔离性隔离性,所以当前事务在操作时,其他事务可以修改,造成错误Redis还没有隔离性悲观锁和乐观锁悲观锁很悲观,认为什么时候都会出问题,无论做什么都会上锁乐观锁很乐观,每次拿数据的时候都认为别人不会修改,所以都不上锁。但是会对数据进行监听,在更新的时候会判断在此期间有没有别人对此数据进行修改。如果有修改,则当前事务执行失败。可以使用版本号(Version)机制和CAS算法实现乐观锁适应于多读的应用场景,这样可以提高吞吐量Redis的监控 WatchRedis实现乐原创 2020-08-26 10:08:08 · 257 阅读 · 0 评论 -
Redis---三个特殊数据类型与命令
Genospatial 地理位置此功能可以推算地理位置的信息,俩地之间的距离,方圆几里的人一般都是通过java代码导入只有六个命令geoadd 添加指定的空间地理位置geoadd k 经度 纬度 k1 经度 纬度 k2 …有效的纬=经度 -180 ~180 有效的纬度 -85.05 ~ 85.05geopos 从k 里查询 具体地点(k2)的经纬度geodist k k1geolist 返回俩个给定位置之间的距离geolist k k1原创 2020-08-25 16:23:53 · 149 阅读 · 0 评论 -
Mysql深入了解----事务
MySql事务 Transactionmysql是默认开启事务,自动提交的事务的原则—ACID原子性 要么都成功要么都失败一致性 事务前后数据的完整性要保持一致 (转账前后都是1000)持久性 一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。(即使数据库崩溃,一旦重启就会恢复到事务提交后的结果)隔离性 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离不隔原创 2020-08-25 13:42:14 · 123 阅读 · 1 评论 -
Mysql深入了解---索引
索引 —采用B+Tree 存储索引是帮助mysql高效获取数据的排好序的数据结构其实索引除了使用B+Tree存储 还可以用 Hash表存储B+Tree多叉平衡树节点中的数据从左到右依次递增非叶子节点不存储data,只存储索引(冗余),可以放更多的索引叶子节点包含所有索引字段叶子节点用双向指针连接,提高区间访问的性能(范围查找)B-Tree每一个节点都存储data,没有冗余索引。没有双向指针为什么B+Tree把data都移到叶子节点,并且增加双向链表?(B+Tree比B-原创 2020-08-25 13:15:16 · 115 阅读 · 1 评论 -
Redis---五个基本数据结构与常用命令
Redis (Remote Dictionary Server )NoSql–不仅仅是SqlNoSql的四大分类KV键值对:新浪:redis美团:redis+Tair阿里,百度:redis+memecache文档形数据库:MongoDB是基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档MongDB是介于关系型数据库和非关系型数据库中间的产品ConthDB列存储数据库:HBASE分布式文件数据库图关系数据库不是存图形的,而是存关系的(如原创 2020-08-24 15:11:11 · 146 阅读 · 1 评论 -
MySql深入了解----数据类型常用函数
数据类型字符串类型(1)char—定长字符串,最大长度为256个字节(2)varchar—可变长字符串,最大长度为256个字节 对应Java中的String 常用(3)tinytext—同varchar,最大长度为256个字节(4)text—可变长字符串,最大长度为64KB(5)mediumtext—可变长字符串,最大长度为16KB(6)longtext—可变长字符串,最大长度为4GB整数类型(1)int或integer—4个字节 对应Java中的的int原创 2020-08-05 11:29:56 · 421 阅读 · 0 评论