- 博客(43)
- 收藏
- 关注
原创 Redis设计与实现之事件
Redis 服务器是一个事件驱动程序,服务器需要处理一下两类事件:文件事件(file event):Redis服务器通过套接字与客户端(或者其他Reids服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他Reids服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列的网络通信操作。时间事件(time event):Redis 服务器中的一些操作(比如 serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。
2021-01-20 15:18:18 283
原创 Redis设计与实现之AOF持久化
除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。如下图所示:举个例子,如果我们对空白的数据库执行以下写命令,那么数据库中将包含三个键值对。redis>SET msg "hello"OKredis>SADD fruits "apple" "banana" "cherry"OKredis>RPUSH
2021-01-18 18:45:38 379
原创 Redis设计与实现之RDB持久化
Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。如下图展示一个包含三个非空数据库的Redis服务器,这三个数据库以及数据库中的键值对就是该服务器的数据库状态。因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis
2020-12-22 22:11:58 652
原创 Redis设计与实现之数据库
本章将对Redis服务器的数据库实现进行详细介绍,说明服务器保存数据库的方法,数据库保存键值对的方法,以及针对数据库的增删改查的实现方法,服务器保存键的过期时间的方法,以及服务器自动删除过期键的方法,以及Redis2.8新引入的数据库通知功能的实现方法。1.1 服务器中的数据库Redis服务器将所有数据库都保存在服务器状态server.h/redisServer结构的db数组中,db数组的每个项都是一个server.h/redisDb结构,每个redisDb结构代表一个数据库:struct redis
2020-12-17 15:17:17 348
原创 Redis设计与实现之对象
一、定义Redis用到的主要数据结构,包括简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等等。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统结构包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到至少一种我们前面所介绍的数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,我们可以针对不同的使用场景,为对象
2020-12-16 11:58:55 176
原创 Redis设计与实现之压缩列表
一、定义压缩列表是哈希键以及列表键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。例如:执行以下命令将创建一个压缩列表实现的列表键:127.0.0.1:6379> RPUSH 1st 1 3 5 10086 "hi" "Zhang"(integer) 6127.0.0.1:6379> OBJECT ENCODING 1st"ziplist"127.0.0.1:6379&g
2020-12-11 11:53:19 266
原创 Redis设计与实现之整数集合
一、定义整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。举个例子,我们下面创建一个只包含五个元素的集合键,并且集合中所有元素都是整数值,那么这个集合键的底层实现就是整数集合。127.0.0.1:6379> SADD numbers 1 3 5 7 9(integer) 5127.0.0.1:6379> OBJECT ENCODING numbers"intset"127.0.0
2020-12-09 15:54:59 172
原创 idea2020程序包存在,代码无错,但是运行的时候却提示Error:(3, 51) java: 程序包com.alibaba.druid.spring.boot.autoconfigure不存在
我用的idea版本是2020,今天运行程序的时候,明明程序包存在,而且代码也没爆红,但是去提示Error:(3, 51) java: 程序包com.alibaba.druid.spring.boot.autoconfigure不试了重新加载maven,也试了去maven仓库找到包删掉再重新加载问题依然无法解决最后看到博客提示,尝试着去file->settings->runner将图中红框地方勾上,问题解决。...
2020-11-26 16:07:37 2670
原创 Redis设计与实现之跳跃表
一、定义跳跃表(skiplist)是一种有序的数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的跳跃表支持平均O(logN), 最坏O(n) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。Redis使用跳跃表作为有序集合键的底层实现之一,若一个有序集合包含的元素数量比较多,或者有序集合中的成员是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现。和链表、字典等数据结构被广泛地应用在Redis内部不同,Redis只在两个地方用到了跳跃表,
2020-11-15 23:07:10 164
原创 Redis设计与实现之字典
字典1.1 定义字典,又称为符号表(Symbol table)、关联表(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。在字典里面,一个键(key)可以和一个值(value)进行关联(将键映射为值)字典中的每个键都是独一无二的,程序可以在字典中根据键查找与之关联的值,或者通过键更新值,又或者根据键来删除整个键值对。Redis所使用的C语言里面没有内置这种数据结构,所以Redis构建了自己的字典实现。字典在Redis中的应用
2020-11-08 23:34:28 151
原创 Redis与实现之SDS和链表
一、简单动态字符串1.1 SDS定义简单动态字符串(simple dunamic string,SDS)被用作Redis的默认字符串表示。从图中可以看出,sds的属性有三个:len、free和buf数组。这里len字段是用来保存sds字符串中所包含字符数目的,free字段则是用来保存buf数组中空余的部分的长度的,而buf数组则是实际用来保存字符串的。比如该结构保存了“Redis”这个字符串,sds和c字符串一样,需要在字符串结尾加上一个“\0”表示该字符串的结束。这里这个sds对象的len属性保了
2020-11-04 23:00:35 194
原创 使用JavaScript实现简单的滑动窗口
使用JavaScript实现简单的滑动窗口。效果图如下,可以左右滑动。源代码已经上传到github上了,地址如下:https://github.com/dongxiaoshi/slidingWindow主体代码如下:<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css">
2020-09-26 23:00:00 1438
原创 本地代码上传到github新手教程
首先登陆github,地址:https://github.com/,如果没有账号可以先进行注册,注册完直接登陆就行。登陆之后点击右上角+号进入项目配置页面配置完成后进入项目界面记下自己项目地址,后面要用到进入本地代码存放目录,右键,点击git hash here。如果没有安装git,可以先提前安装下。进入git界面第一次使用需要先全局配置好在git上的用户名和邮箱,git config --global user.name "你的github名字"git config --glo
2020-09-26 02:45:41 321
原创 使用html+css实现一个静态页面(含源码)
我使用的编辑器是Hbuilder,使用html+css实现一个静态页面。我选择的是联通官网的一个页面。原本页面如下:先对整个页面进行分块,分成顶部,链接区域,导航区域,内容区域,footer区域等部分,每部分分开写内容。html代码如下:<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <link rel="styles
2020-09-06 23:21:24 22851 7
原创 MySQL数据库备份
数据库如果误删数据或者表或者库以后只能通过备份进行还原,数据库的备份显得尤为重要,可以大大增加数据的可靠性。1、使用mysqldump进行备份mysqldump是MySQL数据库使用的一个备份工具,可以为MySQL实现数据库的备份1.1[root@localhost ~]# mysqldump -u root -p -A > all.sql 退出mysql交互模式,在系统Shell中执行(#模式下),以root用户备份当前MySQL数据库中所有库的信息至当前目录下all.sql文件中(all
2020-09-03 00:50:38 749
原创 MySQL中用户权限管理
MySQL中root用户权限太大,不建议平时操作使用root用户(测试环境除外),在平时管理和维护数据库以及通过APP连接使用数据库需要用到权限受限普通用户进行管理。首先我们先创建一个简单的数据库auth,并在auth中创建表格users,插入两条数据,用于接下来的测试使用。下面开始MySQL中创建用户,并赋予不同的权限:mysql> grant select on auth.* to user1@localhost identified by ‘123456’;运行user1用户在本
2020-09-03 00:24:47 232 1
原创 CentOS 7源码包编译安装MySQL数据库
CentOS 7源码包编译安装MySQL数据库软件,具体步骤如下:右键打开terminal,按照下述步骤进行操作。1.下载源码包:wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.27.tar.gzCentOS系统中使用wget命令可以将后面的软件包下载当前目录中2.安装MySQL数据库软件需要的依赖包yum install -y cmake ncurses-devel bison gnutls-de
2020-08-28 00:19:50 941
原创 VM虚拟机下安装Centos7 64位教程
创建虚机步骤如下:点击“创建虚拟机”按钮选择“典型”选择“稍后安装操作系统”(其他两项会采用无人值守安装系统,不建议)选择“Linux”下的“CentOS 7 64位”位置选择一个空间较大盘符(虚机安装出来占用硬盘空间,至少10GB以上剩余空间);最大磁盘大小设置为“120G”(不会直接占用真实硬盘空间)点击“自定义硬件”按钮(如果点击完成了,可以在虚拟机界面中点击编辑虚拟机的设置)。虚拟机设置:内存:内存越大虚拟机速度越快,内存不要小于1G(否则无法开启图形化),不建议超过真机内容的
2020-08-27 12:44:07 1598
原创 Java字符串与日期格式的转化
在平常工作中我们经常要进行字符串与日期格式之间的转化,这时候需要用到SimpleDateFormat来进行格式转换。 下面为大家举个字符串转化为日期格式的例子,使用parse()方法进行转换,需要注意的是对应括号中的格式需要与s0,s1的格式一样。import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class lianxi { public sta.
2020-08-26 00:31:00 6044
原创 Windows10下多个JDK间的切换以及在IntelliJ IDEA切换jdk教程
不同的项目对jdk版本要求不同,在同一台电脑上运行不同的项目,可能就需要进行jdk版本的切换。一、不同版本jdk下载安装。要想进行jdk版本切换,首先电脑上得安装不同版本的jdk。可以去https://www.oracle.com/java/technologies/javase-downloads.html官网进行下载,也可以通过其它方法下载自己想要的jdk版本。下载完之后直接安装或者解压就可以。下载安装的教程网上很多,可以搜一下参考下。二、环境变量的配置点击我的电脑→属性→高级系统设置→环境变
2020-08-05 16:52:23 1155
原创 IntelliJ Idea使用Tomcat启动SSM项目教程
使用idea运行SSM项目,使用Tomcat启动步骤如下:1、打开run,点击Edit Configurations2、点击左上角加号,找到Tomcat Server。如果是本地Tomcat选择Local。3、在Tomcat Server到Unnamed 到Server 到 Application server 的 Configuration ,找到本地 Tomcat 服务器,再点击 OK按钮,有的已经配置好了,直接点OK就行。4、可以改一下名字5、点击“Deployment”,然后点
2020-07-30 11:08:11 9112
原创 win10环境下redis安装教程
Redis安装与在idea中配置1、下载redis下载方式一:可以直接去官网:https://redis.io/download,进去之后,选择在自己想要的版本下载,目前Redis官网只有Linux版本。下载方式二:下载window版本,可以访问https://github.com/MSOpenTech/redis/releases下载最新的64位版本。下载完之后直接解压就可以,解压之后如下图:2、启动redis解压完之后如果想修改redis配置,可以打开redis.window.con
2020-07-21 15:30:15 967
原创 k-近邻算法原理与简单实践
1、原理k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于2...
2020-03-29 21:27:00 3551
原创 NumPy函数库基础
机器学习算法涉及很多线性代数知识在使用Python语言构造机器学习应用时,会经常使用NumPy函数库。这里用到线性代数是为了简化不同的数据点上执行的相同数学运算。将数据表示为矩阵形式,只需要执行简单的矩阵运算而不需要复杂的循环操作。在你开始学习机器学习算法之前,必须确保可以正确运行Python开发环境,同时正确安装了NumPy函数库。NumPy函数库是Python开发环境的一个独立模块,而且大多数...
2020-03-28 22:14:16 546
原创 window10系统下Anaconda安装教程
1、安装包下载与安装直接在官网下载安装包,官网地址https://www.anaconda.com/download/。如下图选择Python3.7的安装包进行下载。下载完成后,按照提示一步步来就行。一直到提示安装完成。中间需要注意的是就是选择Just Me。还有就是在“Advanced Installation Options”中不要勾选“Add Anaconda to my PATH e...
2020-03-28 17:51:42 334
原创 window10系统下在Python3.8中安装numpy库教程
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。要想安装NumPy有两种方式,第一种是在 cmd 中安装;第二种是在 pycharm(Python IDE)中安装。1、查看版本我用的是第一种方式。首先查找 python 安装路径(安装路径有点乱,不要见怪)。并查看里面的版本,我的是3...
2020-03-28 16:14:46 18905 2
原创 Python新手入门之测试代码
编写函数或类的时候,可以编写测试,来确定代码面对各种输入都能够按要求的那样工作。1.1 测试函数下面写一个简单的函数来作为测试的代码。该函数接收姓名并返回完整的姓名。示例如下:在编写一个使用该函数的程序。示例如下:执行结果:(一)单元测试和和测试用例Python标准库中的模块unittest 提供了代码测试工具。单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些...
2020-03-22 21:01:21 7133 1
原创 Python新手入门之存储数据
很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据。不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中。用户关闭程序时,你几乎总是要保存他们提供的信息;一种简单的方式是使用模块json 来存储数据。 模块json 让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。你还可以使用json 在Python程序之间分享数据。更...
2020-03-21 22:34:58 270
原创 Python新手入门之异常
Python使用被称为异异常常 的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常...
2020-03-20 22:18:20 160
原创 Python新手入门之文件
文本文件可存储的数据量多得难以置信:天气数据、交通数据、社会经济数据、文学作品等。每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用 程序来说尤其如此。例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示这些内容。 要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的全部内容,也可以以每次一...
2020-03-17 22:09:19 194
原创 Python新手入门之类
面向对象编程是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情景,其逼真程度达到了令你惊讶的地步。根据类来创建对象被称为实例化,这让你能够使用类的实例。你可以编写一些类并创建其实例。...
2020-03-15 15:20:16 471
原创 Geany运行python时中文注释报错如何解决
在使用Geany运行python的时候,程序中出现中文注释时,可能会出现报错: File “People.py”, line 3 SyntaxError: Non-UTF-8 code starting with ‘\xc4’ in file People.py on line 3, but no encoding declared; see http://python.org/dev/peps...
2020-03-13 14:09:27 1434 1
原创 Python新手入门之函数(三)
1.5 传递任意数量的实参有时候我们并不知道函数需要传递的实参数量,Python允许函数从调用语句中收集任意数量的实参。示例如下:形参名materials中的星号让Python创建一个名为materials 的空元组,并将收到的所有值都封装到这个元组中。函数体内的print 语句通过生成输出来证明Python能够处理 使用一个值调用函数的情形,也能处理使用三个值来调用函数的情形。它以类似的方...
2020-03-12 23:27:24 242
原创 Python新手入门之函数(二)
1.3 返回值函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。在函数中,可使用return 语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。(一)返回简单值可以直接给与函数的值返回,示例如下:执行结果:(二)让实参变成可选的有时候,需要让实参变成可选的,这样使用函数的人就只需在必...
2020-03-11 11:54:10 277
原创 Python新手入门之函数(一)
1.1 定义函数使用关键字def告诉python你要定义函数,向Python指出了函数名,还可能在括号内指出函数为完成其任务需要什么样的信息。简单示例如下:文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。代码行print(“Hello!”) 是函数体内的唯一一行代码,greet_user() 只做一项工作:打印Hello!。执行结果:(一)向函数传递信息:上述...
2020-03-10 21:27:23 322
原创 Python新手入门之用户输入和while 循环
1.1 函数input()的工作原理大多数程序最终的目的都是解决用户的问题,为此通常需要从用户那里获取一些信息。函数input() 让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。示例如下:执行结果:(一)编写清晰的程序每当你使用函数input() 时,都应指定清晰而易于明白的提示,准确地指出你希望用户提供什么样的信息——指出用户该...
2020-03-07 22:19:44 515
原创 Python新手入门之字典
1.1 使用字典(一)访问字典中的值:在Python中,字典是一系列键—值对 。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。在Python中,字典用放在花括号{}中的一系列键—值对表示,要获取与键相关联的值,可依次指定字典名和放在方括号内的键。示例如下:执行结果:(二)添加键...
2020-03-07 15:04:43 553
原创 Python新手入门之if语句
1.1 条件测试(一)检查是否相等或者不相等。判断是否相等使用“”,不相等使用“!=”,判断英文字母的话,需要注意大小写。示例如下:执行结果:(二)检查数字是否相等,除了使用“”,“!=”之外,对于数字还可以使用“<”,“>”,“<=”,“>=”来表示小于,大于,小于等于,大于等于的关系。示例如下:执行结果:(三)检查多个条件,可以使用and和or。其中a...
2020-03-05 15:31:47 379
原创 Python新手入门之操作列表(二)
1.1 使用列表的一部分(一)、创建切片,可以指定要使用的第一个元素和最后一个元素的索引。如果第一个没有指定,则切片从列表首部开始,如果最后一个没有指定,切片从第一个元素的索引一直到列表末尾。 负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任何切片。示例如下:执行结果:(二)、遍历切片,如果要遍历列表的部分元素,可在for 循环中使用切片。示例如下:执行结果:(...
2020-03-04 14:28:57 243
原创 Python新手入门之操作列表(一)
1.1 遍历列表Python中使用for循环处理数据,for后面循环执行的代码需要缩进。在for循环中,想包含多少行代码都可以。在for循环后面,没有缩进的代码都只执行一次,而不会重复执行。示例如下:执行结果:1.2 避免缩进错误(1)错误一:忘记缩进,对于位于for语句后面且属于循环组成部分的代码行,一定要缩进。如果忘记缩进,Python会报错。示例如下:执行结果:(2)...
2020-03-04 10:49:13 194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人