自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis配置详解

文章目录版本说明单位说明配置模块1.includes相关配置2.模块相关配置3.网络相关配置4.general模块配置5.快照相关配置6.主从复制相关配置6.1 无盘复制相关配置7.安全相关配置8.客户端相关配置9.内存管理相关配置9.1惰性释放相关配置10.持久化相关配置11.Lua相关配置12.redis集群相关配置13.慢日志配置14.高级配置15.内存碎片化整理配置版本说明本文配置解析...

2019-12-16 11:53:59 617

原创 redis计数器-HyperLogLog

文章目录背景简介使用方法HyperLogLog原理基数统计概率计数延展介绍-布隆过滤器简介原理bloom Filter的应用背景在工作当中我们经常会遇到一种场景就是统计一个网站的uv以及独立ip访问数等,常用的方法我们会用一个Set集合去储存对应的数据、或者从数据库distinct(这种方法不推荐),假如我们采用set集合去储存一天的uv量,那么set集合中我们储存用户id,假如一个用户id占...

2019-12-11 19:05:21 839

转载 Java位运算技巧

文章目录简介位运算符号位运算优先级位运算应用总结简介位运算符用来对二进制位进行操作,一般来说位运算要比乘除算法快很多,在java中除~以外其他的都是二元运算符。位运算符号& 按位与,1000 & 0001 = 0000| 按位或,1000 | 0001 = 1001^ 按位异或,1000 ^ 0001 = 1001~ 取反,~1000 = 0111<<...

2019-12-06 17:41:00 410

原创 redis数据操作-位图

文章目录背景redis位图简介redis位图基本操作线上实际案例背景在我们平时开发中可能会经常遇到这么一种场景,就是获取用户一段时间内的行为记录,这些行为记录的状态都为Boolean类型,要么是有要么就是无,例如用户的签到记录、某段时间内的打卡记录等等,面对这种场景我们大多数可能都是数据库直接查询然后转换为一个Boolean数组返回前端,数据量少和并发低的情况这么操作是没有问题的,但是并发一高...

2019-12-05 20:38:26 494

原创 redis数据结构-跳跃表

文章目录简介查找过程插入以及更新过程简介跳跃表(skiplist)是一种有序数据链表结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的。查询平均性能为O(logN),最坏的情况会出现O(N)情况,而redis中的zset在数据较多的时候底层就是采用跳跃表去实现的,元素较少的时候会进行小对象压缩采用压缩列表实现。小对象压缩条件:hash-max-zipmap...

2019-12-05 11:27:25 1154

原创 redis数据结构-压缩列表

文章目录简介压缩列表结构级联更新简介ziplist(压缩列表)是redis较为常见的数据结构,zset和hash容器对象在储存较少的元素时采用压缩列表进行储存,压缩列表是一块连续的内存,没有任何空间冗余。hash例子:127.0.0.1:6379> HSET hash_user_age user1 19(integer) 1127.0.0.1:6379> HSET hash...

2019-11-21 17:08:04 534

原创 redis数据结构-字典

文章目录简介数据结构扩容与缩容策略hash攻击简介字典是redis最常用的数据结构,是用来保存键值对的一种特殊性数据结构,与java中的Map结构类似,字典在redis被使用的场景非常多,例如全局的key和value就存在字典中、有过期时间的key也组成了一个字典以及zset集合中的value和score也是通过字典去实现的。数据结构redis字典底层使用哈希表实现的,在源码中可查看dic...

2019-11-20 16:16:14 382

原创 redis数据结构-动态字符串

文章目录简介SDS数据结构字符串的两种储存形式embstr、rawredis字符串的扩容机制简介redis是使用C语言开发,但是redis的字符串并未采用c语言中传统的字符串,而是自己单独构建了一个sds(Simple Dynamic String)结构的数据类型来储存字符串,那么为什么redis不采用c语言传统的字符串去实现呢?这是因为c语言传统的字符串获取字符串长度的时候是O(n)复杂度的...

2019-11-19 15:31:46 570

原创 ReentrantReadWriteLock源码解析

文章目录简介ReentrantReadWriteLock内部结构ReadLock与WriteLockWriteLock锁获取以及锁释放原理写锁的获取写锁的释放ReadLock锁获取以及锁释放原理读锁的获取读锁的释放总结简介ReentrantReadWriteLock是juc包下的一个读写锁工具类,该类内部维护着一个读锁和一个写锁,通过读锁与写锁的分离使得在读多写少的坏境下性能有了很好的提升,可...

2019-11-14 21:47:27 410

原创 ThreadLocalRandom与Random效率对比

ThreadLocalRandom类是jdk1.7在juc包下新增的随机数生成器,该类继承于Random类,那既然有Random随机数生成器了,为什么在jdk1.7的时候又新增一个呢?,这是因为Random在多线程坏境下的效率并不理想,在多线程下使用存在局限性,所以为了提高多线程坏境下随机数生成的效率引入从而了ThreadLocalRandom类。我们先来一个例子来对比下这两个类效率。@Sta...

2019-11-11 21:39:28 893

原创 Semaphore信号量源码解析

简介Semaphore(信号量)是juc包下的一个工具类,主要是用来控制同时访问公共资源的线程数,这个数量在Semaphore中叫做凭证数(acquires),内部是采用AbstractQueuedSynchronizer去实现的,AbstractQueuedSynchronizer是一个同步队列,juc包下有许多工具类都依赖于该类去实现功能,例如ReentrantReadWriteLock、C...

2019-11-11 21:15:02 472

原创 LongAdder类源码解析

LongAdder其实是AtomicLong的升级版,AtomicLong在多线程下会导致较多的自旋重试,主要原因还是因为多线程同时cas同一个变量的时候失败次数较多,那LongAdder的出现就是为了解决AtomicLong在多线程坏境下的痛点。  首先分析源代码之前我们先抛出以下几个问题:LongAdder如何解决AtomicLong的痛点?LongAdder内部维...

2019-11-11 20:43:11 257

原创 一个java对象到底占多大内存?

一个java对象占多大内存呢做java研发的可能平时多少都会接触到这个问题,但是就业务开发来说只要不是追求性能极致,一般不会对这个去问题深入探究,我们熟知的基础类型大家可能都知道 byte(1字节) short(2字节) int(4字节) long(8字节)等,那么一个对象在内存中到底占多大内存呢? 废话不多说,我们先看下面的几个例子。public class A {}...

2019-10-11 20:44:33 982

空空如也

空空如也

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

TA关注的人

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