- 博客(21)
- 资源 (4)
- 收藏
- 关注
原创 Redis 数据结构的编码方式(未完)
Redis五种数据结构string(字符串) 、 hash(哈希) 、 list(列表) 、 set(集合) 、 zset(有序集合),每种数据结构都有自己底层的内部编码实现, 而且是多种实现。如下两张图,左侧为Redis的五种编码,右侧为各种编码的内部编码方式。使用object encoding + key的的方式便可以知道键值对的编码方式,例如:127.0.0.1:6379>...
2019-09-11 01:07:11 269
原创 Redis 键迁移 move、 dump+restore、 migrate
来自:《Redis开发与运维》第2.7.1.4节迁移键功能非常重要, 因为有时候我们只想把部分数据由一个Redis迁移到另一个Redis(例如从生产环境迁移到测试环境) , Redis发展历程中提供了move、 dump+restore、 migrate三组迁移键的方法, 它们的实现方式以及使用的场景不太相同, 下面分别介绍。(1) movemove key dbmove...
2019-09-05 21:33:15 1330
原创 Redis字符串优化
来自:《Redis开发与运维》第8.3.4节1.字符串结构Redis没有采用原生C语言的字符串类型而是自己实现了字符串结构, 内部简单动态字符串(simple dynamic string, SDS) 。如下图所示:Redis自身实现的字符串结构有如下特点:·O(1)时间复杂度获取: 字符串长度、 已用长度、 未用长度。 ·可用于保存字节数组, 支持安全的二进制数据存储。...
2019-09-04 20:00:27 912
转载 Hystrix 初识
背景分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。雪崩效应常见场景硬件故障:如服务器宕机,机房断电,光纤被挖断等。 流量激增:如异常流量...
2019-08-20 20:49:50 145
原创 this web application instance has been stopped already 和 java.lang.NoClassDefFoundError 错误
(菜鸟程序员)今天在公司写代码,写好后激动的在测试环境上线,预期着代码优雅流畅的执行,心里美滋滋。在自动部署平台上点击了一键发布,然后盯着日志直到看到下面这个玩意出现,启动成功。然后我登陆web页面,惊奇的发现nginx竟然报错,始料未及:由于是前后端分离的错误,因此我第一反应是前端的问题。这个页面是50x.html的错误页面,于是进入到nginx配置页面想看看到底是什么问题,然后...
2019-08-19 21:29:40 503
原创 函数式接口理解
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。一、自定义在自定义接口前,我们要先认识一下@FunctionalInterface注解:@FunctionalInterface注解只能标注一个接口,不能标注类,方法,枚举,属性等。 如果接口被标注了@FunctionalInterface,这个类就必须符合函数式接口的...
2019-08-14 20:36:11 815
原创 枚举与注解
《Effective Java》第6章 枚举和注解一、用 enum 代替 int 常量在项目中用int来表示常量类型,不同的常量之间必须用不同的整数来标识,这样的方式无法将常量划分成相互独立的命名空间,很容易造成混乱。而用enum可以定义不同的常枚举类,然后在类中设置常量,不用担心会与其他枚举类中的常量相互影响。每个枚举类都形成独立的命名空间,不互相干扰。二、用实例域代替序数ord...
2019-08-12 23:26:29 141
原创 灵活运用Spring容器中的 getBeansOfType(Class var1) 函数
作为菜鸟程序员,今天阅读公司的代码框架遇到一个很有意思的代码封装,对于我来讲非常有学习意义,所以在此总结一下。项目中经常会遇到要向代码中添加定时任务(类似消费线程),通常这样的定时任务都是临时加入。除此外,项目中的任务都很相似,所以在设计的时候都会为其添加一个超类(或者接口),因此所有的定时任务都要继承这个超类。这些任务通常数量不少,十几个甚至二十几个,相当于要管理至少十几个实例,非常繁琐。因...
2019-08-07 23:46:09 7157 4
原创 列表优于数组
《Effective Java》第28条:列表优于数组列表和数组的区别1、数组是协变的,而泛型则是可变的对于数组,如果 Sub 为 Super 的子类型,那么数组类型 Su[]就是Super[]的子类型。而泛型,List<Sub>不是List<Super>的子类,List<Super>也不是List<Sub>的超类。下面两种代码,数组实现...
2019-08-06 20:41:01 623
原创 接口优于抽象类
《Effective Java》第20条:接口优于抽象类。原因一:现有的类可以很容易被更新,以实现新的接口现有的类想实现新的功能,可以继承一个或者多个接口即可。而如果一个已经继承了某个超类的类,不可能再去继承一个抽象类,只能继承接口。从这个角度而言,一个类无论是否继承了超类,都可以很方便的通过继承接口来扩展自身。原因二:接口是定义 mixin (混合类型)的理想选择混合类型,我找了...
2019-08-05 20:41:37 671
原创 Redis和数据库双写不一致的问题
Redis和数据库双写不一致的问题说的是,在进行数据更新时,Redis和数据库都要进行更新,怎么样才能保证在更新的同时用户读取的数据的一致性呢?我们根据具体的情况分析一下。1、先更新数据库,再更新缓存(不可取)若有两个请求P和Q先后过来更新数据:(1)缓存刚好失效;(2)请求P更新数据库;(3)请求Q更新数据库;(4)请求Q更新缓存;(5)请求P更新缓存;上述情况,...
2019-08-02 00:44:14 1248
原创 Redis缓存击穿,缓存穿透,缓存雪崩的解决方案
缓存击穿,缓存穿透,缓存雪崩,是常见的缓存使用不当导致的问题,今天我们一起梳理梳理。目录一、什么是缓存击穿?二、什么是缓存穿透三、什么是缓存雪崩一、什么是缓存击穿?缓存穿透问题非常好理解,redis中热点数据key如果过期,请求会导致大量的请求直接落在数据库上,这样数据库就会被直接打死。就像缓存这道屏障在key处被击穿一样,这就是缓存击穿。怎么预防缓存击穿问题呢?1...
2019-07-29 23:34:14 126
原创 Redis的Pipeline请求
一、Pipeline是什么Redis是一种基于内存的缓存结构,其处理请求的方式类似NIO,因此效率非常高,QPS可以达到4.4万/秒。但是对于单一客户端来讲,其向redis发起的请求是串行的,如图一,当一个请求获得响应后,才能发送第二个。假设请求客户端请求单程的时间是1ms,一次请求和响应来回就需要2ms,而redis处理一次请求的时间为1/4.4万=0.023毫秒,几乎可以忽略不计。一秒的请...
2019-07-25 20:33:58 247
原创 NavigableSet 是什么 ?
今天看项目代码,项目中用到了TreeSet类。这个类虽然用的不多,但是起码知道该类是SortedSet接口的子类(其实是子子类),内部实现是红黑树。继续看代码又发现了下面一行代码:TreeSet<Long> notifyTreeSet = ....额,此处省略函数,....;...NavigableSet<Long> unreadNotifyIdSet = n...
2019-07-23 23:18:19 3482 1
原创 多线程中Spring的注入问题
在线程中利用@Autowire或者@Resource注入对象,会出现对象为空的情况,如下:@Servicepublic class TestRunnable implements Runnable { @Resource private TestService ts; public TestRunnable(TestService ts){ ...
2019-07-22 20:54:24 1782
原创 try-with-resources优于try-catch-finally
在使用必须关闭的资源时,try-catch-finally是非常常用的选择,但是JDK7发布后,可以改变这种现状。1. try-with-resources的使用java中非常多的资源都继承了Closeable,例如FileInputStream了。在JDK1.7之后,继承了该接口的资源可以采取try-with-resources的方式关闭资源,因为该接口中有一个close方法,try-w...
2019-07-20 00:21:42 494
原创 关于单例模式
一、高并发下的单例模式1.1 双判空,代码如下:public class Singleton{ private static Singleton instance = null; private Singleton () {} public static Singleton getInstance() { if (instance == null)...
2019-07-18 20:02:51 80
原创 String对象中subString()函数内存溢出问题
String对象中用一个数组value来储存字符串,subString()函数的源码如下所示:public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginI...
2019-07-17 20:23:53 1095
原创 保护性拷贝问题
为了防止类的约束条件受到来自类外部的破坏,在进行类设计时需要进行适当的保护性拷贝。下面举一个例子,设计了一个不可变的类Period:public final class Period{ private final Date start; private final Date end; public Period(Date start, Date end){ ...
2019-07-17 19:32:19 176
原创 mysql 8.0 安装后修改密码时候遇到的坑
错误 1:ERROR 1045 (28000): Access denied for user 'liupanwen'@'localhost' (using password: NO)解决办法:安装完后,mysql -h localhost -u root -p 时候报错,ERROR 1045 (28000): Access denied for user 'root'@'localhos...
2019-04-23 21:32:35 1125
原创 MYSQL中 != 和 is not的区别
id name 1 mike 2 jack 3 NULL select name form table where name !='jack'; 该语句只能查出第1行,也就是mike;select name form table where name !='jack' or name is null; 该语句可以查出第1行和第3行,也...
2019-04-01 10:09:54 3565 1
lombok.jar
2019-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人