动态规划问题思维导图
附图一张
Redis 设计与实现(3-字典)
字典:用于保存键值对(key-value pair)的抽象数据结构。
字典是Redis的数据库的底层实现,也是哈希的底层实现之一,但由于C语言没有字典这一数据结构,所以Redis自己构建了该数据结构。
字典的实现Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。
Redis的哈希表实现Redis字典所使用的哈希表由dict.h/dictht结构定义:
typedef struct dictht{ //哈希表数组 dictEntry **table; //哈希表大小 unsigned long size; //哈希表大小掩码。用于计算索引值,总是等于size - 1 unsigned long sizemask; //哈希表已有节点的数量 unsigned long used;} dictht;
table属性是一个数组,数组中的每个元素都是一个指向dict.h/dictEntry结构的指针,每个dictEntry结构保存着一个 ...
Redis设计与实现(2-链表)
链表是Redis底层用非常广泛的数据结构。使用范围包含但不限于:列表键,发布与订阅、慢查询、监视器、客户端状态信息等
链表节点实现每个链表节点使用一个adlist.h/listNode结构来表示:
typedef struct listNode{ //前置节点 struct listNode * prev; //后置节点 struct listNode * next; //节点值 void * value;}listNode;
使用多个listNode结构就可以组成链表,但使用adlist.h/list来持有链表的话,操作起来会更方便:
typedef struct list{ //头节点 listNode * head; //尾节点 listNode * tail; //链表节点数量 unsigned long len; //节点值复制函数 void *(*dup)(void *ptr); //节点值释放函数 void *(*free)( ...
Redis设计与实现(1-字符串)
每个sds.h/sdshdr结构表示一个SDS值:
struct sdshdr{ //记录buf数组重已使用字节的数量,等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用来保存字符串 char buf[];}
free属性的值为0,表示这个SDS没有分配任何未使用空间。
len属性的值为5,表示这个SDS保存了一个五字节长的字符串。
buf属性是一个char类型的数组,最后一个字节保存空字符’\0’。
SDS遵循C字符串以空字符结尾的惯例,保存空字符的1字节空间不计算在SDS的len属性里面。
示例:
SDS遵循C字符串以空字符结尾的惯例,保存空字符的1字节空间不计算在SDS的len属性里面。
通过 len 属性,SDS 获取字符串长度时,其时间复杂度为 O(1) 。
通过检查SDS的空间是否满足修改所需的要求,杜绝了缓冲区溢出的可能性。
当 SDS API 需要对SDS进行修改时,API 会先检查SDS的空间是否满足修改所需的要求,如果不满 ...
CentOS7 安装Redis6.0
今天给一台崭新的服务器(CentOS 7.7)安装Redis时才发现,Redis已经更新到了6.0(手动滑稽),抱着用心不用旧的心态,立马喜滋滋地下载,上传到服务器上面开始安装,结果刚开始就碰壁了。再次记录一下安装的小坑。本文不讨论Redis6.0的新特性,仅记录安装踩到的坑。
下载Redis6.0
使用linux wget命令:
wget http://download.redis.io/releases/redis-6.0.1.tar.gz
前往官网下载,使用文件传输工具传输至服务器。
安装依赖安装Redis需要安装依赖,命令如下:
yum install gcc gcc-c++ -y
需要注意的是,Redis6.0需要gcc版本不能过低,最好5.0版本以上,否则会编译出错。
升级系统gcc命令如下:
安装centos-release-scl。
yum install centos-release-scl
安装devtoolset,注意,如果想安装7.版本的,就改成devtoolset-7-gcc。
yum install devtoolset-8-gc ...
Redis学习笔记 (1)
第一次接触Redis,已经记不清是什么时候了,那时候对它的唯一印象就是它是数据库,还能做缓存。对于它的底层,数据结构什么的一概不知,更不用说什么缓存,消息通知什么的了。前段时间又系统的看了一遍Redis视频教程和书本教程,在此做个记录。毕竟好记性不如烂笔头。此为开篇。
初识RedisRedis是基于key-value的存储服务系统,支持多种数据结构,并且是开源的。
特性
速度快
Redis速度之所以快的最根本原因,是因为其数据存在内存中。
持久化
以异步的方式将数据保存在硬盘上
RDB
AOF
多种数据格式
字符串
list
哈希
集合
有序集合
Bitmaps:位图
HyperLogLog:超小内存唯一值计数
GEO:地理信息定位
多功能
发布订阅
事务
Lua脚本
pipeline
安装/启动安装# Linux# 获取安装包wget 安装包链接# 解压tar -zxvf 安装包# 添加软连接ln -s 安装包 redis# 安装cd redismake && make install
Redis目录可执行文件说明:
...
Python Supervisor使用教程
supervisor简介
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
It shares some of the same goals of programs like launchd, daemontools, and runit. Unlike some of these programs, it is not meant to be run as a substitute for init as “process id 1”. Instead it is meant to be used to control processes related to a project or a customer, and is meant to start like any other program at boot time.
官方文档:点击此处
以上摘自 ...
重拾Hexo主题博客
去年6月份,接触到了hexo静态博客,一时兴起之下,就跟着教程搭了一个。但只是搭了一个,之后就再也没用过了。一个月之前我便在思考重试起我的博客网站,但依然没想好是使用前后端分离,还是直接使用模板语言,亦或是hexo。一个月后,终于决定还是使用hexo搭建,一时多熟悉一下hexo,第二也是最重要的一点是,想要借助静态博客,锻炼一下我的markdown写作能力,好了,正文开始,此篇为记录下搭建过程。本文不介绍详细安装过程
工具/环境搭建安装nodejs由于hexo基于nodejs,所以在使用hexo之前需要安装nodejs,安装nodejs方法这里不再赘述,各位看官直接网搜教程即可PS:尽量安装最新/稳定版本的nodejs
安装hexo安装好node之后,就可以安装hexo了。打开Terminal,输入npm i hexo-cli -g,等待安装结束后,hexo便安装好了。如果嫌弃安装速度过慢的话,可以配置一下npm的国内下载源,这里不再赘述,直接搜淘宝npm
使用github安装git没有过github经历的朋友,先去网上搜一下github(国内访问可能会慢),跟着网 ...