
数据库
文章平均质量分 82
编程小耗子
本人比较喜欢高性能服务器开发。
在校曾获奖:
中国大学生计算机设计大赛国赛三等奖;
龙鼎杯河北二等奖;
蓝桥杯省赛三等奖;
CCPC河北省赛三等奖;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
悲观锁与乐观锁以及乐观锁的实现
悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所 以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于 write_conditio原创 2021-02-17 13:25:36 · 370 阅读 · 0 评论 -
mysql的sql优化
sql优化对查询进行优化, 应尽量避免全表扫描, 首先应考虑在 where 及 order by 涉及的列上建立索引。应尽量避免在 where 子句中使用!=或<>操作符, 否则将引擎放弃使用索引而进行全表扫描。应尽量避免在 where 子句中对字段进行 null 值判断, 否则将导致引擎放弃使用索引而进行全表扫描, 如:select id from t where num is null;#可以在 num 上设置默认值 0, 确保表中 num 列没有 null 值,原创 2021-02-02 08:58:30 · 124 阅读 · 0 评论 -
redis之内存淘汰
redis内存淘汰Redis是基于内存存储,常用于数据的缓存,所以Redis提供了对键的过期时间的设置,实现了几种淘汰机制便于适应各种场景。设置过期时间:我们可以在设置键时设置expire time,也可以在运行时给存在的键设置剩余的生存时间,不设置则默认为-1,设置为-1时表示永久存储。清除过期key 的方式定时删除设置键的过期时间时,创建一个 Timer ,当过期时间到临时,立刻删除键。内存友好型策略,一旦键过期,就会被删除,并释放所占用的内存,Cpu 不友好,当一批数量比较多的键过期时原创 2021-01-26 23:24:13 · 154 阅读 · 0 评论 -
redis高可用之RDB持久化
RDB因为Redis是内存数据库, 它将自己的数据库状态储存在内存里面, 所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面, 那么一旦服务器进程退出, 服务器中的数据库状态也会消失不见。为了解决这个问题, Redis提供了RDB持久化功能, 这个功能可以将Redis在内存中的数据库状态保存到磁盘里面, 避免数据意外丢失。RDB持久化既可以手动执行, 也可以根据服务器配置选项定期执行, 该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB持久化功能所生成的RDB文件是一个经过压原创 2021-01-24 17:13:42 · 145 阅读 · 0 评论 -
redis之哨兵Sentinel
Sentinel(哨兵)Sentinel(哨岗、 哨兵) 是Redis的高可用性(high availability) 解决方案: 由一个或多个Sentinel实例(instance) 组成的Sentinel系统(system)可以监视任意多个主服务器, 以及这些主服务器属下的所有从服务器, 并在被监视的主服务器进入下线状态时, 自动将下线主服务器属下的某个从服务器升级为新的主服务器, 然后由新的主服务器代替已下线的主服务器继续处理命令请求。如果监视到主服务器下线,那么会先选举出一个Sentinel首原创 2021-01-24 12:18:09 · 245 阅读 · 1 评论 -
redis之主从复制实现原理
主从复制redis为了实现⾼可⽤(⽐如解决单点故障的问题),会把数据复制多个副本部署到其他节点上,通过复制,实现Redis的⾼可⽤性,实现对数据的冗余备份,保证数据和服务的可靠性。在Redis中, 用户可以通过执行SLAVEOF命令或者设置slaveof选项, 让一个服务器去复制(replicate) 另一个服务器, 我们称呼被复制的服务器为主服务器(master) , 而对主服务器进行复制的服务器则被称为从服务器(slave)。通过使用slaveof [ip] [port] 即可设置从服务器。原创 2021-01-23 19:42:36 · 181 阅读 · 0 评论 -
redis之跳跃表的实现
跳跃表跳跃表(skiplist) 是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的。跳跃表支持平均O(logN) 、 最坏O(N) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。在大部分情况下, 跳跃表的效率可以和平衡树相媲美, 并且因为跳跃表的实现比平衡树要来得更为简单, 所以有不少程序都使用跳跃表来代替平衡树。Redis使用跳跃表作为有序集合键的底层实现之一, 如果一个有序集合包含的元素数量比较多(默认情况是大于128个使用跳表), 又原创 2021-01-23 16:14:41 · 226 阅读 · 0 评论 -
redis之字典实现
字典在不进行rehash的时候,使用的是ht[0],进行rehash的时候,ht[0]和ht[1]一起使用。typedef struct dict { //类型特定函数 dictType *type; //私有数据 void *privdata; //哈希表 dictht ht[2]; // rehash索引 //当rehash不在进行时, 值为-1 in trehashidx; /* rehashing not in pro原创 2021-01-23 00:11:09 · 264 阅读 · 1 评论 -
对MyISAM与InnoDB这两个数据库引擎的思考
文章链接:https://codemouse.online/archives/2020-06-03221206MyISAM用的是表级锁InnoDB用的是行级锁事务是如何实现的?通过建立一个临时表(undolog),所有的操作都存放在临时表中,当事务确定的时候,才将临时表的内容写入到原来的表中。而回滚操作也就是丢弃这个临时表,原先表保持不变,也就是回滚了。为什么InnoDB支持事务而MyISAM不支持?因为MyISAM用的是表级锁,如果用了两条数据,表被锁住了,第二条数据无法修改变动。原创 2020-06-23 11:05:52 · 109 阅读 · 0 评论 -
c++调用数据库
文章链接:https://codemouse.online/archives/6546872158步骤通过调用mysql_library_init 初始化MySQL库通过调用mysql_init()初始化连接句柄使用SQL语句调用mysql_close()关闭调用mysql_library_end()终止使用库函数实现#include "MySQLForCAPI.h"MySQLForCAPI::MySQLForCAPI(){ //初始化库 if (0 == mysql_libra原创 2020-06-20 19:32:15 · 1429 阅读 · 0 评论 -
mysql安装与设置远程连接
文章链接:https://codemouse.online/archives/6844543835mysql的安装sudo apt-get install mysql-serversudo apt isntall mysql-clientsudo apt install libmysqlclient-dev检查sudo netstat -tap | grep mysql查看备用用户sudo vim /etc/mysql/debian.cnf注意:debian-sys-maint 就是备原创 2020-06-19 21:07:54 · 133 阅读 · 1 评论 -
数据库---redis安装与启动
redis简介REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets原创 2020-06-14 23:03:46 · 160 阅读 · 0 评论 -
mysql数据库的安装及简单使用
认识MySQL,安装,基本管理,查询 查询复杂数据,数据库管理 3. 存储过程,编程接口数据库 MySQL5.7 语言工具 visual studio 2013MySQL安装和环境配置下载MySQLhttps://dev.mysql.com/downloads/这个页面告诉询问你是否登录,告诉你登录之后有哪些好处,我们不登录,点击页面底部的“No thank...原创 2018-12-19 16:24:29 · 370 阅读 · 0 评论 -
mysql的简单使用
1.想要在命令行使用msyql,需要将mysql的安装路径下的bin目录添加到环境变量里面如我的目录的绝对路径如下F:\MySQL\server\bin然后将路径写到系统环境变量然后找到path ,如果没有,请新建一个path,在用户环境变量或者系统环境变量都可以点击后出现以下界面点击新建 输入你刚刚的mysql 的根目录下的bin目录...原创 2018-12-19 15:45:33 · 319 阅读 · 2 评论