自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

营长的博客

营长的博客

  • 博客(63)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 第五章-并行模式与算法

5.1 探讨单例模式 209单例模式非常常见,我们不可避免会在多线程环境中使用它们。并且,系统中使用单例的地方可能非常频繁,因此我们非常迫切地需要一种高效的单例实现。第一种实现方式(饿汉式)public class Singleton private Singleton(){System.out.println("Singleton is create");private static...

2020-03-15 21:54:30 281

原创 第十五章-复制

可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器。如:127.0.0.1:12345> SLAVEOF 127.0.0.1 6379OK进行复制中的主从服务器双方的数据库将始终保存相同的数据,概念上将这种现象称作“数据库状态一致”,或者简称“一致”。15.1旧版复制功能的实现Redis的复制功能分为同步(sync)和命...

2020-03-13 22:25:37 134

原创 第九章-数据库

9.1 服务器中的数据库 90所有数据库都保存在服务器状态redisServer结构的db数组中:struct redisServer { // ... redisDb *db; // 一个数组,保存着服务器中的所有数据库 int dbnum; //服务器的数据库数量 // ...};dbnum属性来决定应该创建多少个数据库(默认16个),可以...

2020-03-13 08:53:33 212

原创 第十一章-AOF持久化

与RDB不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的。服务器在启动时,可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态。11.1AOF持久化的实现AOF持久化功能的实现可以分为命令追加( append)、文件写入、文件同步( sync)三个步骤。11.1.1命令追加...

2020-03-13 08:53:06 118

原创 第十章-RDB持久化

因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis 提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点...

2020-03-13 08:52:27 175

原创 第五章-跳跃表

跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。Redis只在两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构。5.1 跳跃表的实现 39Redis的跳跃表由redis. h/ zskiplistNo...

2020-01-18 22:00:24 141

原创 第四章-字典

字典,又称为符号表( symbol table )、关联数组( associative array )或映射(map), 是一种用于保存键值对( key-value pair )的抽象数据结构。4.1 字典的实现 24Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。4.1.1哈希表// 哈希表typedef stru...

2020-01-17 20:44:14 117

原创 第三章-链表

Redis中除了链表键之外,发布与订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区。3.1 链表和链表节点的实现 20// 链表节点定义typedef struct listNode { struct listNode * prev; // 前置节点 struct listNode * ne...

2020-01-16 21:19:26 102

原创 第二章-简单动态字符串

在Redis的数据库里面,包含字符串值的键值对(注意,键也是)在底层都是由SDS实现的。(在Redis源码里,C字符串只会作为字符串字面量用在一些无须对字符串值进行修改的地方,比如打印日志)。如:redis> SET msg "hello world"OKRedis将在数据库中创建一个新的键值对,其中键是一个字符串对象,对象的底层实现是一个保存着字符串“msg”的SDS。值也是一个字...

2020-01-16 21:19:04 158

原创 第四章-锁的优化及注意事项

4.1 有助于提高锁性能的几点建议 1624.1.1 减少锁持有时间 162系统持有锁时间越长锁竞争程度就越激烈,只对需要同步的代码块加锁,可以减小锁持有时间进而提高锁性能。减少锁的持有时间有助于降低锁冲突的可能性,进而提高锁的并发能力。4.1.2 减小锁粒度 163减小锁粒度就是指缩小锁定对象的范围,从而减小锁冲突的可能性,进而提高并发能力。例如:如ConcurrentHashM...

2020-01-12 16:00:26 236

原创 第三章-JDK并发包

为了更好地支持并发程序,JDK内部提供了大量实用的API和框架。本章主要介绍这些JDK内部的功能,其主要分为三大部分:同步控制工具JDK对线程池的支持JDK的一些并发容器3.1 多线程的团队协作:同步控制 71同步控制是并发程序必不可少的重要手段。下面我们首先将介绍关键字synchronized、Object.wait()方 法和Object.notify()方法的替代品(或者说...

2020-01-09 18:59:09 177

原创 第二十八章-安全管理

28.1访问控制用户不能对过多的数据具有过多的访问权。在现实世界的日常工作中,决不能使用root。应该创建一系列的账号,有的用于管理,有的供用户使用,有的供开发人员使用,等等。28.2管理用户MySQL用户账号和信息存储在名为mysql的MySQL数据库中。28.2.1创建用户账号创建一个新用户账号CREATE USER ben IDENTIFIED BY '123456' ;...

2020-01-08 22:26:00 83

原创 第八章-备份与恢复

8.1 备份与恢复概述 350按备份的方法分:HOT BACKUP(热备):在数据库运行时备份,对正在运行的数据库的操作没有影响。备份工具:ibbackup、XtraBackupCOLD BACKUP(冷备):在数据库停止时备份。WARM BACKUP(温备)在数据库运行时备份,对正在运行的数据库的操作有影响。按备份后文件的内容分:逻辑备份:内容一般是SQL语句或是表内实际数据...

2020-01-07 15:17:57 170

原创 第二十七章-全球化和本地化

27.1 字符集和校对顺序数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。在讨论多种语言和字符集时,将会遇到以下重要术语:字符集:字母和符号的集合;编码:某个字符集成员的内部表示;校对:规定字符如何比较的指令。使用何种字符集和校对的决定在服务器、数据库和表级进行。...

2020-01-07 15:16:34 117

原创 第二十六章-管理事务处理

MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。26.1事务处理MyISAM不支持明确的事务处理管理,InnoDB支持。事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完 整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。事务处理中包含的几个术语:事务...

2020-01-06 23:34:30 115

原创 第七章-事务

事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时,可以确保要么所有修改都已经保存了,要么所有修改都不保存。InnoDB存储引擎中的事务完全符合ACID的特性。ACID 是以下4个词的缩写:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性( durability)本章主要关注事务的原子性这一概念,并说明怎样正确使用事务及编写...

2020-01-05 15:11:21 283

原创 第二十五章-使用触发器

25.1触发器如果想要某条语句(或某些语句)在事件发生时自动执行,此时就需要触发器。如果需要在某个表发生更改时自动进行一些其他的处理。这确切地说就需要触发器。触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 BEGIN 和 END 语句之间的一组语 句):DELETE; INSERT; UPDATE,其他语句不支持触发器。创建触发器创建触发器时,需要4个条件:...

2020-01-05 15:10:50 345

原创 第二十四章-使用游标

24.1游标MySQL检索操作返回一组称为结果集的行,这组返回行都是与SQL语句相匹配的行。有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。不像多数DBMS,MySQL游标只能用于存储过程(和函数)。24.2使用游标在能够使用游标前,必须声明它,这个过程实际上没有检索数据,它只是定义要使用的SELECT语句一旦声明后,必须打开游标以供使用。这个过程用前面定义的SE...

2020-01-04 21:37:59 298

原创 第二章-java并行程序基础

2.1 有关线程你必须知道的事 29进程是线程的容器,进程是程序的实体。程序是“死”的,进程是“活”的。线程就是轻量级进程,是程序执行的最小单位。线程间的切换和调度的成本远远小于进程。2.2 初始线程:线程的基本操作 32Java中为线程操作提供了一些API。2.2.1 新建线程 32通过new关键字创建一个线程对象,此时线程处于NEW状态,等到线程start()方法被调用时,会让这...

2020-01-04 21:37:27 101

原创 第一章-走入并行世界

1.1何去何从的并行计算 11.1.1忘掉那该死的并行 21.1.2可怕的现实:摩尔定律的失效 41.1.3柳暗花明:不断地前进 51.1.4光明或是黑暗 61.2你必须知道的几个概念 71.2.1同步(Synchronous)和异步(Asynchronous) 7同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法...

2020-01-03 23:35:14 130

原创 第二十三章-使用存储过程

23.1存储过程存储过程简单来说,就是为以后的使用而保存 的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用 不仅限于批处理。23.2 为什么要使用存储过程使用存储过程有3个主要的好处,即简单、安全、高性能。数据库可能允许用户使用存储过程,但不一定允许他们创建存储过程。23.3使用存储过程23.3.1执行存储过程MySQL称存储过程的执行为调用,因此MySQL执行存储...

2020-01-03 23:30:55 187

原创 第二十二章-使用视图

22.1视图视图是虚拟的表。作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。22.1.1为什么使用视图在视图创建之后,可以用与表基本相同的方式利用它们。视图仅仅是用来查看存储在别处的数据的一种设施。 视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。 在添加或更改这些表中的数据时,视图将返回改变过的数据。使用视图存在...

2020-01-02 14:42:50 99

原创 第六章-锁

一方面要最大程度地利用数据库的并发访问,另外一方面还要确保每个用户能以一致的方式读取和修改数据,因此出现了锁(locking)机制。6.1 什么是锁 249锁是数据库系统区别于文件系统的一个关键特性。数据库系统使用锁是为了支持对共享资源(注意是共享资源,不单单指行记录)进行并发访问,提供数据的完整性和一致性。有多少种数据库,就可能有多少种锁的实现方法。用户可能对某个特定的关系数据库系统的锁定...

2020-01-02 14:42:02 143

原创 第五章-索引与算法

5.1 InnoDB存储引擎索引概述 183InnoDB存储引擎支持以下几种常见的索引:B+树索引全文索引哈希索引InnoDB 存储引擎支持的哈希索引是自适应的,InnoDB 存储引擎会根据表的使用情况自动为表生成哈希索引,不能人为干预是否在一张表中生成哈希索引。B+树索引目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引并不能找到一个给定键值的具体行,只能找到对应的...

2020-01-01 21:54:45 220

原创 第二十一章-创建和操纵表

21.1创建表一般有两种创建表的方法:使用具有交互式创建和管理表的工具(如第2章讨论的工具);表也可以直接用MySQL语句操纵。21.1.1表创建基础输入CREATE TABLE customers( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL , cust_address ...

2020-01-01 21:51:34 136

原创 第二十章-更新和删除数据

20.1更新数据语法例子:更新客户10005的 cust_name和cust_email列。输入UPDATE customersSET cust_name='The Fudds', cust_email='[email protected]'WHERE cust_id=10005;注意:UPDATE语句中可以使用子查询,使得能用SELECT语句检索出的数据更新列数据。如...

2019-12-30 12:10:49 101

原创 第十九章-插入数据

19.1数据插入INSERT是用来插入(或添加)行到数据库表的。插入可 以用几种方式使用:插入完整的行;插入行的一部分;插入多行;插入某些查询的结果。19.2插入完整的行第一种是不指定列输入# 简单但不安全,如果原来表列结构调整,会有问题 insert into customers values (null, 'Pep E. LaPew', '100...

2019-12-30 12:10:22 185 1

原创 第三章-对象的共享

我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且希望确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。3.1 可见性通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些问题想不...

2019-12-30 11:00:34 203 2

原创 第十八章-全文本搜索

18.1理解全文本搜索并非所有引擎都支持全文本搜索,MyISAM支持全文本搜索,InnoDB不支持18.2使用全文本搜索为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改 变不断地重新索引。在对表列进行适当设计后,MySQL会自动进行所有的索引和重新索引。在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索18.2.1启用全文本搜索支持一般在创...

2019-12-30 10:59:51 187 1

原创 第十七章-组合查询

17.1组合查询MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询 (compound query)。任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出。17.2创建组合查询可用 UNION 操作符来组合数条SQL查询。17.2.1使用UNIONUNION的使用很简单。所需做的只是给出...

2019-12-30 10:59:21 125 1

原创 第二章-线程安全性

要编写线程安全的代码,核心在于对状态访问操作进行管理,特别是对共享(shared)和可变(mutable)的状态访问。修复多线程问题的三种方式:不在线程之间共享该状态变量将状态变量修改为不可变的变量在访问状态变量时使用同步一般来说,访问某个变量的代码越少,就越容易确保对变量的所有访问都实现正确同步,同时也更容易找出变量在哪些条件下被访问。当设计线程安全类时,良好的面向对象技术、不可...

2019-12-28 14:12:55 123

原创 第十六章-创建高级联结

16.1使用表别名SQL允许给表名起别名,有以下目的:缩短SQL语句;允许在单条SELECT语句中多次使用相同的表。例子:SELECT cust_name,cust_contactFROM customers AS c,orders AS o,orderitems AS oiWHERE c.cust_id=o.cust_idAND oi.order_num=o.order_nu...

2019-12-28 11:36:16 130 2

原创 第十五章-联结表

15.1联结15.1.1关系表关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(relational))互相关联。外键:外键为某个表中的一列,他包含另一个表的主键值15.1.2为什么要使用联结使用联结,当数据存储在多个表中时,可以用单条SELECT语句检索出数据。注意:联结由MySQL根据需要建立,它存在于查询的执行当中,而并没有实际的数...

2019-12-28 11:34:58 229

原创 第十四章-使用子查询

14.1子查询子查询:嵌套在其他查询中的查询。14.2利用子查询进行过滤输入SELECT cust_name,cust_contact FROM customers WHERE cust_id IN(SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num...

2019-12-28 11:34:27 112

原创 第十三章-分组数据

13.1数据分组分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。13.2创建分组输入 SELECT vend_id,COUNT(*) AS num_prods FROM proucts GROUP BY vend_id;分析 上面的SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段。GROUP BY 子句指示MySQL按vendid排序...

2019-12-28 11:33:49 678

原创 第一章-简介

1.1并发简史出现操作系统。基于以下原因:资源利用率,公平性,便利性,操作系统实现多个程序同时执行,即多个进程。上面三个原因也进一步导致线程的出现。线程允许在同一个进程中同时存在多个程序控制流。线程也被称为轻量级进程。线程是操作系统调度的基本单位。1.2线程的优势发挥多处理器的强大能力多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率。使用多线程还有助于提高单核处理器上...

2019-12-27 18:36:39 68

原创 第十一章-使用数据处理函数

11.1函数与其他大多数计算机语言一样,SQL支持利用函数来处理数据。函数一般是在数据上执行的,他给数据的转换和处理提供了方便,在前一章中用来去掉尾空格的RTrim()就是一个函数的例子几乎每种DBMS的都有支持的不同函数,每种差异会很大,因此函数没有SQL的可移植性强。11.2使用函数11.2.1文本处理函数输入: SELECT vend_name,Upper(vend_name) A...

2019-12-26 18:20:19 141

原创 第十二章-汇总数据

12.1聚集函数聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数。12.1.1AVG()函数输入: SELECT AVG(prod_price) AS avg_price FROM products;分析: 此SELECT语句返回值avg_price,它包含products表中所有产品的平均价格只用于单个列: AVG()只能用来确定特定数值的平均值...

2019-12-26 18:18:16 127

原创 第三章-垃圾收集器与内存分配策略

3.1概述垃圾收集器关注Java堆和方法区的内存回收。3.2对象已死吗?判断方法:1.引用计数算法2.可达性分析算法3.2.1引用计数算法给对象添加引用计数器,当有地方引用它时就加1,引用失效就减1,为0时就认为对象不再被使用可回收。简单,但是无法解决对象间循环引用的问题3.2.2可达性分析算法给对象添加引用计数器,当有地方引用它时就加1,引用失效就减1,为0时就认为对象不再被使用...

2019-12-26 16:39:40 97

原创 第二章-InnoDB存储引擎

2.1 InnoDB存储引擎概述 17InnoDB存储引擎是第一个完整支持ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU。2.2 InnoDB存储引擎的版本 182.3 InnoDB体系架构 19首先以一张图简单展示 InnoDB 的存储引擎的体系架构.从图中可见, InnoDB 存储引擎有多个...

2019-12-25 19:25:11 123

蓝桥杯练习系统vip题目和测试数据

蓝桥杯练习系统vip题目和测试数据蓝桥杯练习系统vip题目和测试数据蓝桥杯练习系统vip题目和测试数据

2018-05-02

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除