stack - db
文章平均质量分 67
数据库相关的所有技术,主要包括:mysql,mongodb,redis
这是谁的博客?
这个作者很懒,什么都没留下…
展开
-
db - MySQL - MySQL视图
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录MySQL视图概念优点语法使用MySQL视图概念视图是由基本表的查询所定义的虚拟表优点简化用户操作对机密数据提供安全保护提供一定程度的逻辑独立性多种角度表示同一数据语法创建视图CREATE [OR REPLACE] VIEW view_name AS select_statement;修改视图CREATE OR REPLACE VIEW view_name AS s.原创 2022-01-06 15:04:57 · 1502 阅读 · 0 评论 -
db - MySQL - MySQL常用函数
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录MySQL常用函数字符串函数数学函数日期和时间函数格式化函数系统信息函数MySQL常用函数字符串函数语法函数名称说明ascii(str)返回字符串最左侧字符的ASCII代码值bit_length(str)以bit为单位返回字符串str的长度concat(str1, str2, …)返回连接后的字符串insert(str, x, y, instr)将字符.原创 2022-01-05 14:57:28 · 290 阅读 · 0 评论 -
db - MySQL - MySQL表连接
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录MySQL表连接表之间的关系表连接子查询多个表的查询MySQL表连接表之间的关系关系一对一1 : 1一对多1 : n多对多m : n使用1 : 1create table `t_1_1` ( `id` int primary key, `name` varchar(255) unique not null) ENGINE=InnoDB;c.原创 2022-01-04 14:43:02 · 294 阅读 · 0 评论 -
db - MySQL - MySQL的约束和索引
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录MySQL的约束和索引主键约束唯一约束外键约束非空约束默认值约束索引自增列MySQL的约束和索引主键约束特点唯一非空索引语法create table <table> (id int primary key);create table <table> (id int,mobile char(11),primary key (id, mobi.原创 2021-12-28 11:13:36 · 567 阅读 · 0 评论 -
db -MySQL - MySQL数据操作
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录MySQL数据的操作增改删查MySQL数据的操作增语法insert into [table] (col1, col2, …) values ([col1], [col2], …), ([col1], [col2], …);使用创建数据表t_1create table `t_1` ( `id` int, `name` varchar(255), `date`.原创 2021-12-27 12:20:07 · 513 阅读 · 0 评论 -
db - MySQL - MySQL数据库和数据表的操作
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录MySQL数据库和数据表的操作数据库数据表MySQL数据库和数据表的操作数据库创建数据库create database [db];使用创建数据库db_1create database db_1;指定编码create database db_2 character set utf8mb4;指定编码和字符集create database db_3 characte.原创 2021-12-24 14:53:34 · 770 阅读 · 0 评论 -
db - MySQL - MySQL用到的数据类型
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。文章目录数据类型数值类型字符串类型日期类型使用数据类型数值类型tinyint(1字节)int(4字节)bigint(8字节)double(8字节)字符串类型char(0~255字节)varchar(0~65535字节)text(0~65535字节)blob(0~65535字节)日期类型date(4字节,1000-01-01~9999-12-31, YYYY-MM-DD)datet.原创 2021-12-23 10:38:23 · 394 阅读 · 0 评论 -
redis - redis的zSetOperations的使用
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。// score递增 zSetOperations.incrementScore(key, value, 1.0);// 获取scoredouble score = zSetOperations.score(key, value);// 获取score从大到小的排行long rank = zSetOperations.reverseRank(key, value);// 获取score从大到小的前n名S.原创 2020-11-19 10:37:07 · 1908 阅读 · 0 评论 -
redis - 再谈redis的基础数据类型SDS
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis是C语言编写的,但是为了更好的实用性,在其基础上又进行了封装。其中SDS简单动态字符串就是一个典型的实现。与C语言字符串结构的对比如下:图1 C语言的字符串的结构图2 Redis自定义的字符串的结构由上图可知,与C语言原生的字符串结构相比,Redis自定义的简单动态字符串增加了预分配空间free与字符串长度len的记录,并且通过buf[]存储字符串的值。这样做有三个好处,第一,获取字符串长度的时.原创 2020-10-28 10:52:58 · 232 阅读 · 0 评论 -
redis - redis的RDB持久化细节
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。RDB持久化可以通过调用两个方法实现:save和bgsave;调用save方法生成rdb文件时,使用的是主进程,所以在rdb文件生成之前,进程不能处理其他的命令。调用bgsave方法生成rdb文件时,主进程会创建一个子进程来进行生成rdb文件的操作,而主进程仍然可以处理其他操作。在执行bgsave时,为了避免竞争与冲突,会拒绝其他的save及bgsave,bgrewriteaof也会延迟执行。RDB文件载入是在.原创 2020-09-16 12:25:23 · 175 阅读 · 0 评论 -
redis - redis的sort系列核心技术精讲
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。首先展示一下redis的sort功能的使用:# 对数值排序sort nums# 对数值倒序sort nums desc# 对字符串排序sort fruits alpha# 根据其他字段值排序sort fruits by *-price# 返回排序后的某段序列值sort nums limit 2 3# 返回排序后序列值对应的其他字段值sort fruits alpha get *-name# .原创 2020-10-21 09:33:39 · 183 阅读 · 0 评论 -
redis - 缓存的过期删除策略
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。缓存过期以后如何删除呢?第一,主动删除,即后台建立定时任务,每隔一段时间遍历所有有过期时间的缓存,判断是否过期,如果过期则进行删除;第二,被动删除,即每次取数据前判断一下所取的数据是否有过期时间设置,如果有,判断其是否过期,如果过期则删除并返回null;第三,根据一定的策略删除,比如LRU或LFU算法,当内存空间不足时,根据LRU或LFU算法删除过期的缓存。...原创 2020-09-08 09:42:15 · 491 阅读 · 0 评论 -
redis - redis的AOF持久化细节
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。如果说RDB是以二进制的形式保存的redis数据库以及键值对信息,那么AOF保存的就是具体的命令了。首先,注意一点,RDB持久化是默认打开的,如果要使用AOF持久化功能,则需要手动开启。比如我们执行“set key value”这个命令,那么AOF中保存的就是“set key value”。大家都知道,AOF是append only file,服务器每次执行写入命令,都会将这个命令追加到aof_buf缓存中。.原创 2020-09-21 17:11:46 · 156 阅读 · 0 评论 -
redis - Redis支持7大数据类型
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。原创 2020-08-04 13:47:03 · 232 阅读 · 0 评论 -
redis - redis过期时间的设置及获取
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。// 设置过期时间需要指定TimeUnit,要不然在increment的时候会报错valueOperations.set(countKey, "1", duration, TimeUnit.MILLISECONDS);// 获取过期时间,返回的是以秒为单位的stringRedisTemplate.getExpire(countKey);...原创 2020-11-17 16:27:28 · 2569 阅读 · 0 评论 -
redis- redis缓存中不能使用相同的key
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis缓存中不能使用相同的key 哪怕是不同的对象类型也不可以原创 2020-11-20 13:11:51 · 4047 阅读 · 0 评论 -
redis - redis的lua脚本都有哪些及其执行过程
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis主要的lua脚本命令有:1. eval: 执行脚本(前面已经介绍过,先封装成f_sha,然后执行) 1> 封装函数f_sha 2> 将脚本加入到lua_scripts_dict中 3> 设置超时钩子 4> 执行脚本 5> 移除超时钩子 6> 返回结果2. evalsha:根据sha校验和执行脚本3. script load:加载脚本(eval的前两步).原创 2020-10-19 10:01:05 · 482 阅读 · 0 评论 -
redis - redis的两种订阅方式的实现原理
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis有两种订阅方式,subscribe与psubscribe,subscribe用于频道的订阅,psubscribe用于模式的订阅。频道的订阅即对频道的完全匹配;模式订阅其实是对频道的模糊匹配。但是两者是由不同的数据结构存储的,具体内容如下:上图是subpub_channels的数据结构 - 频道的数据结构上图为pubsub_patterns的数据结构 - 模式的数据结构至于订阅和退订操作,其实是根.原创 2020-10-13 08:40:30 · 948 阅读 · 0 评论 -
redis - redis节点间的消息类型
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis的消息包括:meet, ping, pong, fail, publish五种。meet: 加入集群ping: 查看是否连通并发送消息pong: 对ping的回复确认, 成为主节点后的广播通知fail: 某节点下线通知publish: 广播消息...原创 2020-10-12 08:14:04 · 157 阅读 · 0 评论 -
redis - 到底什么是redis脑裂?如何解决脑裂?
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。什么是redis脑裂?首先,脑裂从字面上理解就是脑袋裂开了,就是思想分家了,就是有了两个山头,就是有了两个主思想如果在redis中,形式上就是有了两个master,记住两个master才是脑裂的前提在正常情况下,如果master挂了,那么写入就会失败,如果是手动解决,那么人为会检测master以及slave的网络状况,然后视情况,如果是master挂了,重启master,如果是master与slave之间的连.原创 2020-08-13 15:50:38 · 2775 阅读 · 2 评论 -
redis - redis的事务-multi-exec-watch的原理
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。关于redis的事务是通过multi,exec,watch三个命令实现的。具体过程如下1. 执行 watch key 监控事务中要操作的字段2. 执行 multi 开启事务3. 写入具体的业务操作4. 执行 exec 并返回执行结果接下来解析原理首先 watch 监控 key 所起的作用实际上是一个乐观锁,它所监控的是在事务期间有没有其他客户端对所监控的值进行修改,通过REDIS_DIRTY_CAS作.原创 2020-10-14 16:43:23 · 963 阅读 · 0 评论 -
redis - redis的过期删除策略
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis采用惰性删除与定期删除相结合的方式对过期键进行删除。惰性删除调用的是expireIfNeeded方法,每次增删改查操作都会调用expireIfNeeded方法,如果键存在并过期则删除。定期删除调用的是activeExpireCycle函数,每次都从特定的数据库中取一定数量的随机键进行检查,并删除其中过期的键。current_db记录activeExpireCycle函数的进度,以便下一次继续执行。.原创 2020-09-14 08:19:13 · 91 阅读 · 0 评论 -
redis - redis如何删除数据
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。在redis操作时,你会发现并没有删除数据的功能,但是有些数据需要持久缓存,只是会根据条件删除一些不符合要求的,那么如何做呢:stringValueOpt.set(key, "0", 10, TimeUnit.MILLISECONDS);其实可以这样,以相同的键插入一个值,然后设置一个极短的过期时间如10ms,这样set以后,这个键对应的数据就会在极短的时间内删除,我们就可以实现持久保留正常数据而条件删除不符合.原创 2020-08-25 08:13:53 · 2449 阅读 · 0 评论 -
redis - redis的安装与启动
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。官网下载下载:5.0.9解压进入make启动: cd src ./redis-server 后台运行: vi redis.conf daemonize yes cd src ./reids-server ../redis.conf默认端口: 6379 ...原创 2020-08-18 10:04:17 · 154 阅读 · 0 评论 -
redis - redis对bit的操作
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。redis的bit操作有getbit: 首先找到字节数组的位置,然后找到位的位置,返回位的值。setbit: 首先找到要写入的字节位置,如果没有,则创建,然后找到字节对应的位,将旧值存储到oldValue,然后修改为新值,最后返回旧值。bitcount: 字节数组中位的值为1的个数,算法:(1)逐个遍历位;(2)字节位计数表;(3)汉明重量(位分组)...原创 2020-10-23 10:11:10 · 869 阅读 · 0 评论 -
redis - redis的String命令及对应的Template操作
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。String操作:// 连接客户端./redis-cli -h 127.0.0.1 -p 6379// 设置键值对,返回okset hello good// 设置键值对同时设置过期时间,ex为秒,ps为毫秒,返回okset hello good ex|px 10// key不存在则设置key的值setnx hello good// 设置多个键值对mset hello good he good k.原创 2020-09-30 17:42:52 · 326 阅读 · 0 评论 -
redis - redis执行lua脚本
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。关于redis对lua脚本的支持,这里简单描述一下上图是执行效果过程是这样的: 1. 执行eval命令 2. lua环境将 "return 'hello world'" 封装成 f_... 的脚本函数 3. 然后执行返回不仅如此,lua脚本还可以通过redis.call和redis.pcall执行redis命令过程如下1. lua通过执行redis.call将redis命令传到伪客户端2. 伪客.原创 2020-10-16 09:42:45 · 246 阅读 · 0 评论 -
redis - redis的sort和limit的核心原理
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。在redis中sort是如何实现的呢?首先用两张图来表示:图1.1 - redis排序之前图1.2 - redis排序之后由图1.1可以看出,在对集合排序之前,redis首先会创建一个与集合大小相等的redisSortObject数组,每一个redisSortObject元素都依次指向对应的集合元素。redisSortObject数组中主要有两个元素,一个元素是obj,用来指向集合中对应的元素;另一个元.原创 2020-10-20 10:20:01 · 885 阅读 · 0 评论 -
redis - redis的RDB、AOF、复制是如何删除过期键的
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。1.RDB:redis每次生成新的二进制文件时,就会对键进行检查,如果已过期,则该键不会被写入到新创建的二进制文件中;在加载二进制文件时也是一样,如果检查到文件中的键已过期,则该键不会被加载到内存中。2.AOF:在进行AOF时对已过期的键在插入时不会进行检查,只有redis服务器通过惰性删除或过期删除将过期的键删除时,AOF才会追加一条该键的DEL。但是在AOF文件Rewrite时,会进行过期键检查,凡是过期的键不.原创 2020-09-15 08:15:38 · 597 阅读 · 5 评论 -
redis - redis的持久化配置
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。为了数据安全,rdb和aof都需要合理的配置使用版本5.0.9vi redis.conf rdb /SNAPSHOTTING dir ./ 修改为你想要的路径 dir /home/db 其他应该比较合理,无需修改 aof /APPEND ONLY MODE appendonly no 修改为 appendonly ye.原创 2020-08-18 10:01:26 · 150 阅读 · 0 评论 -
redis- redis的类型检查和引用计数
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。在操作redis时如果类型不匹配就会报错WRONGTYPE Operation against a key holding the wrong kind of value这是因为在get之前会做类型检查,如果get的方式与实际类型不匹配就会抛出异常。redis中键的类型由type标注,而值的类型由encoding标注,type标注的即为redis的对象类型,encoding标注的即为值的具体存储实现,如lis.原创 2020-11-23 08:53:58 · 541 阅读 · 0 评论 -
redis - redis的RDB文件的结构
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。示例如下:RDB1:REDISdb_versiondatabasesEOFcheck_sumREDIS0001database 0EOFcheck_sum的值database 0:SELECTDBdb_numberkey_value_pairsSELECTDB0key_value_pairs的内容key_value_pairs:.原创 2020-09-18 09:48:48 · 313 阅读 · 0 评论 -
mysql - 概述
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。Mysql架构是一种处理与存储分离的架构处理层除以上以外功能还实现了所有的内置函数,如日期、时间、数学和加密函数所有跨存储引擎的功能:储存过程、触发器、视图等存储引擎不会解析sql,主要负责数据的存储、提取和事务,存储引擎之间也不会相互通信。每个连接都需要一个线程客户端 -> 服务器:身份认证 -> 权限认证可以通过 explain 查看优化器优化过程并通过 hint 修改优化过程对.原创 2020-08-23 10:52:34 · 140 阅读 · 0 评论 -
mysql - 处理数据量较大的表
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。mysql处理数据量较大的数据,可以采用元数据表的形式,使用元数据表来记录表名,查询时先查找元数据表,根据元数据表找到要查找的数据表,然后执行查找。尤其是对于分表的情况是很有效的。一个表,无论是垂直拆分还是水平拆分,都记录到元数据表中,然后查找有对应内容的分表,这样提高了分表的灵活性,一张表可以有多种拆分方式,然后通过元数据表统一管理,统一定位。比如某一列查询特别频繁并且时间链很长,完全可以将这一列单独分成一个表注.原创 2020-08-25 19:39:32 · 671 阅读 · 0 评论 -
mysql - 索引优化
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。1.索引必须是独立的列索引不能是表达式的一部分:如,where id +1 = 2,索引是不生效的索引不能是函数的参数:如,where to_days(current_date),索引是不生效的2.索引选择性不重复的索引值数/总行数索引的选择性越高越好检查索引选择性代码:select count(distinct city)/count(*) as sel from country;3.字符列很长.原创 2020-08-27 09:08:12 · 608 阅读 · 1 评论 -
mysql - 如何查看特定的表
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。# 查看以‘t_’开头的表show tables like 't_%';原创 2021-05-19 11:16:06 · 381 阅读 · 0 评论 -
mysql - mysql索引失效的情况有哪些
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。原创 2021-03-26 10:14:57 · 163 阅读 · 0 评论 -
mysql - 基本介绍
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。Mysql数据库概念建立在计算机存储设备上,按照数据结构来组织、管理、存储数据的仓库特点数据共享减少冗余数据独立数据安全故障恢复层次操作系统数据库数据库管理系统数据库应用程序常见数据库产品Mysql(Oracle)Oracle(Oracle)SQL Server(Micro)DB2(IBM)Redis(Pivotal)Elasticsearch (Elastic).原创 2021-11-05 09:37:31 · 267 阅读 · 0 评论 -
mysql - MYSQL的ACID都是什么意思,底层是如何实现的?
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。ACIDA原子性:一个事务只有执行成功和失败回滚两种状态,没有中间态。C一致性:事务执行成功或失败,都不会破坏数据库的完整性约束。如,A给B转账,A转成功了,B一定会收到。I隔离性:一个事务对一个数据进行操作时,其他事务不允许对同一个数据进行操作。D持久性:事务执行完成后,对数据所做的操作持久的保存在数据库中,不允许回滚。底层实现A原子性:事务执行有成功和失败两种情况,执行成功后,保存到数据库中.原创 2020-08-10 09:46:05 · 973 阅读 · 0 评论 -
mysql - mysql查看数据表结构
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。desc [tablename]describe [tablename]show columns from [tablename]show create table [tablename]原创 2020-10-13 13:34:46 · 214 阅读 · 0 评论