自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

翻译 18 Redis-复制

本文内容均来自《Redis设计与实现》一书1.引言在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称被复制的服务器为 主服务器(master),而对主服务器进行复制的服务器被称为从服务器(slave)。示例假设存在两个Redis服务器,地址分别为127.0.0.1:6666和127.0.0.1:7777,现在我们向120.0.0.1:6666发送以下命令:127.0.0.1:666...

2020-06-23 23:51:50 165

翻译 17 Redis-事件

1.引言Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。 时间事件(time event):Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。.

2020-06-11 17:29:09 140

翻译 16 Redis-AOF持久化

1.引言除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。示例我们对一个空白数据库执行以下写命令,那么数据库中将包含以下三个键值对。RDB持久化保存数据库状态的方法是将msg、fruits、numbers三个键的键值对保存到RDB文件中,而AOF持久化保存数据库状态的方法是将服务器执行的SET、SAD...

2020-06-10 22:34:41 159

翻译 15 Redis-RDB持久化

数据库状态:Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,我们将服务器中的非空任意数据库以及它们的键值对统称为数据库状态。1.抛砖引玉因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,..

2020-06-09 00:21:15 131

翻译 14 Redis-数据库

1.服务器中的数据库Redis服务器将所有的数据库都保存在服务状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis/redisDb结构,每个redisDb结构代表一个数据库。结构// 服务器状态typedef struct redisServer { // ······ // 数组,保存服务器中的所有数据库 redisDb *db; // 服务器的数据库数量 int dbnum; /

2020-06-07 00:09:48 162

翻译 13 Redis-对象的操作

1.命令类型Redis中用于操作键的命令基本上可以分为两种类型。可以对任意类型的键执行的命令:DEL命令、EXPIRE命令、RENAME命令、TYPE命令、OBJECT命令。对特定类型的键执行的命令:字符串键:SET、GET、APPEND、STRLEN。 哈希键:HDEL、HSET、HGET、HLEN。 列表键:RPUSH、LPOP、LINSERT、LLEN。 集合键:SADD、SPOP、SINTER、SCARD。 有序集合键:ZADD、ZCARD、ZRANK、ZSCORE。2.

2020-06-01 00:53:17 170

翻译 12 Redis-有序集合对象

有序集合对象的编码可以是ziplist或者skiplist。1.定义ziplist编码的有序集合对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员(member),第二个节点保存元素的分值(score)。压缩列表内的集合元素按分值从小到大进行排序,分值较小的元素被放置在靠近表头的位置,而分值较大的元素被放置在靠近表尾的位置。skiplist编码的有序集合对象使用zset结构作为底层实现,一个zset结构同时包含一个字典和一个跳..

2020-05-31 00:30:16 122

翻译 11 Redis-集合对象

集合对象的编码可以是intset或者hashtable。1.定义intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值全部被设置为NULL2.编码转换当集合对象可以同时满足以下两个条件时,对象使用intset编码:集合对象保存的所有元素都是整数值。 集合对象保存的元素数量不超过512个。不能...

2020-05-30 23:08:48 141

翻译 10 Redis-哈希对象

哈希对象的编码可以是ziplist和hashtable。1.定义ziplist编码的哈希对象使用压缩列表作为底层实现。每当有新的键值对要加入到哈希对象时,程序会先将保存了键的压缩列表节点推入到压缩列表的表尾,再将保存了值的压缩列表节点推入到压缩列表的表尾。保存了同一键值对的两个节点总是紧挨在一起,保存键的节点在前,保存值得节点在后。先添加到哈希对象中得键值对会被放在压缩列表得表头方向,而后来添加到哈希对象中的键值对会被放在压缩列表的表尾方向。hashtable编码的哈希对象使...

2020-05-30 22:47:12 95

翻译 09 Redis-列表对象

列表对象的编码可以是ziplist或者linkedlist。1.定义ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点保存一个列表元素。linkedlist编码的列表对象使用双端链表作为底层实现,每个双端链表节点都保存了一个字符串对象,而每个字符串对象都保存了一个列表元素。(StringObject为字符串对象的简化表示)注意:linkedlist的编码的列表对象在底层的双端链表结构中包含了多个字符串对象,这种嵌套字符串对象的行为在哈希对象、集合对象和有...

2020-05-28 23:52:13 110

翻译 08 Redis-字符串对象

字符串对象的编码可以是int、raw或者embstr。1.定义如果一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串对象会将整数值保存在字符串对象结构的ptr属性里面(将void*转换成long),并将字符串对象的编码设置为int。如果一个字符串对象保存的是一个字符串值,并且这个字符串值的长度大于39字节,那么字符串对象将使用一个简单动态字符串来保存这个字符串值,并将对象的编码设置为raw。如果字符串对象保存的是一个字符串值,并且这个字符串值的长...

2020-05-27 23:37:50 131

翻译 07 Redis-对象的类型与编码

前言Redis用的主要数据结构有简单动态字符串、双端链表、字典、压缩列表、跳跃表、整数集合等。但是Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构构建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象五种类型的对象,每种对象用到至少一种前面的数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。同时,我们可以针对不同的使用场景,为对象设置不同的数据结构,从而优化对象在不同场.

2020-05-27 00:19:17 138

翻译 06 Redis-压缩列表

压缩列表是列表键和哈希键的底层实现之一。当一个列表项只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来作为列表键的底层实现。另外,当一个哈希键只包含少量键值对时,并且每个键值对的键和值要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来作为哈希键的底层实现。1.压缩列表的构成压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点.

2020-05-25 22:48:41 109

翻译 05 Redis-整数集合

整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。1.定义结构typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; } intset;contents:是一个数组,是整.

2020-05-24 14:16:32 98

翻译 04 Redis-跳跃表

跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。跳跃表的效率可以和平衡树相媲美,并且跳跃表的实现比平衡树要简单,所以不少程序都使用跳跃表来代替平衡树。Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量较多,又或者有序集合中元素的成员是比较长的字符串时,Redis就会使用跳跃表来作为有序集合键的底层实现。1.定义..

2020-05-23 19:00:53 125

翻译 03 Redis-字典

Redis的数据库就是使用字典来作为底层实现的,对数据库的增删改查操作也是构建在对字典的操作之上的。字典还是哈希键的底层实现之一,当一个哈希键包含的键值对比较多,或者键值对中的元素都是比较长的字符串时,Redis会使用字典作为哈希键的底层实现。1.定义结构// 哈希表typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; ...

2020-05-23 00:39:30 130

翻译 02 Redis-链表

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表地长度。列表键地底层实现之一就是链表。当一个列表键地包含了数量较多的元素,或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。链表在Redis中的应用:列表键、发布与订阅、慢查询、监视器、保存客户端的状态信息、构建客户端输出缓冲区。1.定义结构// 链表节点typedef struct listNode { // 前置节点 struct ..

2020-05-21 23:57:14 124

翻译 01 Redis-简单动态字符串(SDS)

1.定义 SDS结构struct sdshdr { int len; int free; char buf[];}len:记录buf数组中已使用的字节数;等于SDS所保存字符串的长度。free:记录buf数组中未使用的字节数。buf:字节数组,用于保存字符串。注意:1.SDS遵循C字符串以空字符串为结尾的惯例,保留空字符的1字节空间,不计算在SDS的len属性里,并为空字符分配额外的1字节空间;2.添加空字符到字符串末尾的操作,是由SDS函数自动完.

2020-05-18 14:30:48 126

转载 RabbitMQ

RabbitMQ

2019-06-20 11:43:20 93

翻译 微信公众号/企业号开发文档(java)

微信公众号/企业号开发文档(java)

2019-04-18 15:23:02 1119

原创 Springboot发送邮件配置

spring.mail.host=smtp.mxhichina.comspring.mail.port=465spring.mail.username=spring.mail.password=spring.mail.properties.mail.smtp.socketFactory.port=465spring.mail.properties.mail.smtp.socketFac...

2019-04-17 10:34:26 787

原创 SpringBoot整合Redis

1、引入Redis依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、配置application.pr...

2018-12-19 13:52:52 86

原创 SpringBoot发送邮件

1、配置application.properties#######邮件配置#######主机spring.mail.host=#用户名spring.mail.username=#密码spring.mail.password=#编码spring.mail.default-encoding=gb2312#使用465端口spring.mail.properties.mail.s...

2018-12-06 10:44:06 116

原创 设计模式之工厂方法模式(java)

1、概念工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。2、UML类图 3、java代码实现抽象产品:通常是一个接口。例如:定义一个运算操作接口(Opera...

2018-10-30 15:57:43 247

原创 Java根据Word模板生成Word文档(Freemarker实现)

public class WordExportUtil { private static Configuration configuration; static { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } /** * 加载ftl模板 * ...

2018-10-30 14:07:44 539

原创 设计模式之代理模式(java)

1、概念为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。2、UML类图 3、java代码实现 抽象角色:表演接口(Act)public interface Act { void act();}具体角色:演员类(Actor),实现表演接口(Act)...

2018-10-26 11:38:07 99

原创 设计模式之装饰者模式(java)

1、概念装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。2、UML类图 3、java代码实现抽象组件(Component):接口或抽象类public abstract class Component { public abstract void operation();} ...

2018-10-18 11:43:40 104

原创 设计模式之策略模式(java)

1、概念定义了一个算法簇,对每个算法进行封装,使得算法之间可以相互代替。2、 UML类图3、java代码实现 抽象策略角色:策略类,通常是一个接口或抽象类public abstract class Strategy { public abstract void algorithmInterface();}具体策略角色A、B、C:包装了相关的算法和行为...

2018-10-17 11:00:20 125

原创 mysql解压版安装教程

1、下载安装包2、解压安装包3、新建my.ini配置文件[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[mysqld]#设置3306端口port = 3306# 设置mysql的安装目录basedir="D:\Program Files\mysql-5.7.18-winx64"   这里地址记得加引号,...

2018-10-09 09:55:16 145

原创 Spring AOP(AspectJ注解式拦截和方法规则式拦截实现)

1、编写拦截规则的注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Action { String name();}2、编写使用注解的被拦截类@Servicepublic class DemoAnnotationService {...

2018-09-30 09:48:11 3083

原创 Spring事件(Application Event)

1、场景Spring的事件为Bean和Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要另外一个Bean监听当前Bean所发送的事件。2、流程自定义事件,继承ApplicationEvent 定义事件监听器,实现ApplicationListener 使用容器发布事件3、示例自定义事件public...

2018-09-29 16:41:04 118

原创 设计模式之简单工厂模式(java)

1、概念简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。2、UML类图3、java代码实现 抽象运算操作类public abstract c...

2018-09-29 13:57:01 224

原创 SpringBoot拦截器实现判断用户是否登录

1、拦截器拦截请求处理public class UserLoginVerifyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) th...

2018-09-26 13:45:16 5263 2

原创 微信用户访问微信公众号(订阅号)的网页时判断用户有没有关注公众号(订阅号)

1、前提:微信公众号分为服务号和订阅号,它们的接口权限各不相同;服务号可以通过网页授权接口,用户授权后获取用户的openid,通过用户的openid获取用户的信息,用户的信息里包含用户对公众号的关注字段。但是,订阅号没有相应的网页授权接口权限,无法从通过相应的接口来获取openid(注意:可通过微信用户和公众号之间的交互事件获取openid)。2、解决方法(借助微信开放平台):将订阅号...

2018-09-21 14:01:04 5416

原创 Java微信公众号开发(自定义分享功能)

1、登录微信公众平台配置业务域名和JS接口安全域名(不带http://)2、 服务器配置(如果服务器配置开启,则用户发送给公众号的消息和事件都会被微信转发到配置的url中,开发者可自行处理) 服务器地址(URL)具体代码如下:微信公众号开发依赖包:<!--添加微信依赖 begin--> <!-- https://mvnrepository.com...

2018-09-21 11:53:37 4311 1

原创 SpringBoot项目部署在weblogic中间件注意事项

1、SpringBoot项目Tomcat部署无需手动配置web.xml,但是使用weblogic部署项目时需配置所有相关的监听器和过滤器等。<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="h

2018-09-21 11:16:47 9139

原创 Java使用Poi操作Excel表格之数据导出

基于java注解利用poi实现简单的数据导出

2018-05-14 17:11:29 203

空空如也

空空如也

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

TA关注的人

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