自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 JVM需要用到的参数

基础参数-Xms:Java堆内存的大小-Xmx:Java堆内存的最大大小-Xmn:Java堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小了-XX:PermSize=:永久代大小-XX:MaxPermSize:永久代最大大小-Xss:每个线程的栈内存大小垃圾回收时候的参数-XX:PretenureSizeThreshold=_ : 当一个对象大于这个值时,会直接进入老年代-XX:SurvivorRatio=_ : E区和S区的比值-XX:NewRatio=_ : 年轻代(包

2021-04-29 15:20:17 93

原创 G1垃圾回收器

G1把堆内存分成了Region,好多个小块,不区分年轻代和老年代Region的数量最多为2048个,然后Region的大小必须是2的倍数,比如说1MB、2MB、4MB之类的。默认新生代对堆内存的占比是5%这个是可以通过“-XX:G1NewSizePercent”来设置新生代初始占比的,其实维持这个默认值即可。因为在系统运行中,JVM其实会不停的给新生代增加更多的Region,但是最多新生代的占比不会超过60%,可以通过“-XX:G1MaxNewSizePercent”。而且一旦Region进行了.

2021-04-29 15:19:06 363

原创 ParNew+CMSGC

要了解GC首先得知道他的回收算法------可达性分析算法可达性分析算法 就是看我这个对象有没有引用,没有引用就是可以回收的你得找到它的根GC Roots有哪些可以作为GC Roots呢?1 引用栈帧中的本地变量表的所有对象2 引用方法区该静态属性的所有对象3 引用方法区中常量的所有对象4 本地方法栈中(Native方法)引用的对象还得需要了解4中引用:强引用 Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存

2021-04-27 15:36:03 456

原创 Java的内存结构

首先要知道的是Java的内存结构是JVM那个图Java的内存模型是JMM堆: 存放new实例,数组 负责线程共享,线程安全问题 相当于JMM的主内存虚拟机栈:又叫做线程栈 每个线程都有自己独立的栈空间,他们之间互不影响.就是JMM的主内存的副本数据 存放: 局部变量 栈帧(记录我们方法的信息)本地方法栈: java代码调用C语言代码方法区: 多个线程共享,线程安全问题1 类的信息2 常量3 静态变量4 运行时常量PC寄存器: 记录当前线程执行的行号.在多线程的情况下记录多线程之间上

2021-04-27 09:56:34 103

原创 Java代码是如何运行的

java代码如何运行:一个类从加载到使用经历了: 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载加载分为 虚拟机自带的加载器(没讲)启动类加载器 加载的范围是jdk路径下的lib 这个获取的classloader是null扩展类加载器 加载的范围是jdk路径下的lib/ext应用类加载器 class文件自定义加载器这里涉及到了双亲委派机制双亲委派机制即 当一个类需要加载

2021-04-27 09:53:32 147

原创 rediscluster 的slave的自动迁移

比如现在有10个master,每个有1个slave,然后新增了3个slave作为冗余,有的master就有2个slave了,有的master出现了salve冗余如果某个master的slave挂了(含有1个slave),那么redis cluster会自动迁移一个冗余的slave给那个master,重新实现一个master挂载一个slave就是 你的没了 我的还有多的 咱俩是兄弟 我在给你一个只要多加一些冗余的slave就可以了为了避免的场景,就是说,如果你每个master只有一个slave,万一

2021-04-23 09:46:50 199

原创 redis cluster的水平扩容

1、加入新mastermkdir -p /var/redis/7007port 7007cluster-enabled yescluster-config-file /etc/redis-cluster/node-7007.confcluster-node-timeout 15000daemonize yespidfile /var/run/redis_7007.piddir /var/redis/7007logfile /var/log/redis/7007.logbind 192.1

2021-04-22 10:14:15 137

原创 搭建redis cluster,横向扩展master

首先你去复制redis的conf文件有三个机器自己做的事一台机器上部署两个conf7001 7002 7003 7004 7005 7006下面的配置要有的mkdir -p /etc/redis-clustermkdir -p /var/log/redismkdir -p /var/redis/7001port 7001cluster-enabled yescluster-config-file /etc/redis-cluster/node-7001.confcluster-node-

2021-04-22 10:11:18 105

原创 搭建哨兵

mkdir -p /etc/sentinelmkdir -p /var/sentinel/5000mkdir -p /var/log/sentinel/5000每一个哨兵都要放在/etc/sentinel下放入5000.conf请去我的资源那里下载参数讲解注意 有先后顺序daemonize yeslogfile /var/log/sentinel/5000/sentinel.logport 5000//绑定自己的服务IPbind 192.168.31.19dir /var/sen

2021-04-21 14:21:53 68

原创 哨兵原理

1、sdown和odown转换机制sdown和odown两种失败状态sdown是主观宕机,就一个哨兵如果自己觉得一个master宕机了,那么就是主观宕机odown是客观宕机,如果quorum数量的哨兵都觉得一个master宕机了,那么就是客观宕机sdown达成的条件很简单,如果一个哨兵ping一个master,超过了is-master-down-after-milliseconds指定的毫秒数之后,就主观认为master宕机sdown到odown转换的条件很简单,如果一个哨兵在指定时间内,收到了q

2021-04-21 14:12:17 137

原创 搭建redis的主从复制

1 需要两个服务器2 配置conf主: bind 服务器IPrequirepass 从redis的密码启动redis-cli -h 服务器IP -a 密码从:bind 服务器IPslaveof masterIP master端口masterauth master密码slave-read-only yes启动: redis-cli -h 服务器IP压测cd /opt/redis-3.2.8/src./redis-benchmark -h 服务器IP参数 -c (clients

2021-04-19 10:07:04 51

原创 主从架构核心原理

1、主从架构的核心原理当启动一个slave node的时候,它会发送一个PSYNC命令给master node如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据; 否则如果是slave node第一次连接master node,那么会触发一次full resynchronization开始full resynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命

2021-04-19 10:05:43 337

原创 redis replication的核心机制

(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量(2)一个master node是可以配置多个slave node的(3)slave node也可以连接其他的slave node(4)slave node做复制的时候,是不会block master node的正常工作的(5)slave node在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加

2021-04-19 10:02:27 78

原创 对redis的持久化文件做数据备份以及恢复

linux下创建目录在/usr/local下创建目录mkdir copymkdir snapshottingcd copy创建复制的脚本 vim redis_rdb_copy_hourly.sh写入#!/bin/sh// cur_date=date +%Y%m%d 每天cur_date=date +%Y%m%d%krm -rf /usr/local/redis/snapshotting/$cur_datemkdir /usr/local/redis/snapshotting/$cu

2021-04-16 10:53:29 184

翻译 使用redis做秒杀操作

@Autowiredprivate OrderService orderService;//创建令牌桶实例private RateLimiter rateLimiter = RateLimiter.create(10);可以拿到10个令牌,拿不到的可以等待,登不上就拒绝@GetMapping(“killtokenmd5limit”)public String killtokenlimit(Integer id,Integer userid,String md5) {//加入令牌桶的限流措施

2021-04-16 10:17:34 254

原创 redis持久化之RDB

**1、RDB持久化机制的工作流程**(1)redis根据配置自己尝试去生成rdb快照文件(2)fork一个子进程出来(3)子进程尝试将数据dump到临时的rdb快照文件中(4)完成rdb快照文件的生成之后,就替换之前的旧的快照文件dump.rdb,每次生成一个新的快照,都会覆盖之前的老快照(1)在redis中保存几条数据,立即停掉redis进程,然后重启redis,看看刚才插入的数据还在不在数据还在,为什么?带出来一个知识点,通过redis-cli SHUTDOWN这种方式去停掉red

2021-04-15 15:08:10 77

原创 redis数据类型之GEO

geo可以用来存放坐标实现查找附近人等一些操作//可批量存入坐标名称geoadd key 经度 纬度 名称 经度 纬度 名称//可以根据名称获取你所存入的坐标geopos hebei tianjin baoding//用来获取两个地理位置的距离geodist hebei tianjin baoding [m/km/ft/mi]m:米,距离单位默认为米,不传递该参数则单位为米。km:公里。mi:英里。ft:英尺//可以根据给定地理位置坐标获取指定范围内的地理位置集合georadiu.

2021-04-14 11:21:52 506

原创 redis数据类型之位图

setbit key int 1将这个key的第几位设置为1,也只能是1返回的不是1 就是0 (返回他的位修改之前的数字)bitcount key [start end]/ bitcount key 0 4计算这个key0-4位上有几个是1因为他存的都是1位,可以存放这个操作都有那个用户操作过setbit add 1 1setbit add 2 1用户1 用户2 进行了add操作那么我bitcount add就知道了add这个操作有2个用户动过getbit add 1 返回是1 就

2021-04-14 11:18:26 67

原创 redis数据类型之hypperLoglog

pfadd key [value…] 添加东西 添加成功返回1pfcount key [key…] 计算一个或多个pf的独立总数 如果是多个返回最大值 计算的是一个粗略值计算的方式暂时没懂pfmerge destKey [sourcekey…] 求多个pf的并集并赋值给destKey可以利用pfcount的粗略算法来统计今天的uv值/周/年(点击量)周/年的话需要merge利用pfadd不能添加相同的值可以做判断是否是垃圾数据...

2021-04-14 11:14:33 292

原创 redis数据类型之Zset

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表zadd …将一个或多个 mem

2021-04-14 11:06:17 222

原创 redis数据类型之HashSet

Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>hset 给集合中的键赋值如果value是中文会出现重新编码hget 从集合取出valuehmset 批量设置hash的值hexists key 查看哈希表key中,给定域field是否存在hkeys 列出该hash集合的所有fieldhvals 列出

2021-04-14 11:00:39 1257

原创 redis数据类型之Set命令

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。sadd 将一个或多个member元素加入到集合key当中,已经存在与集合的member元素将

2021-04-14 10:57:50 176

原创 redis数据类型之list命令

List单键多值Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。lpush/rpush 从左边/右边插入一个或多个值结果是 5 4 3 2 1 6 7 8 9 10lpop/rpop 从左边/右边吐出一个值,值在键在,值光键亡rpoplpush 从列表右边吐出一个值,插到 列表左边l2 结果是 9 e d c b alr

2021-04-14 10:55:31 55

原创 redis数据类型之String命令

String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个valueString类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512Mset 添加键值对get 查询对应的键值append 将给定的追加到原值的末尾strlen 获得值的长度setnx 只有在key不存在时,设置key的值 返回

2021-04-14 10:47:55 142

原创 redis的基本操作命令

keys * 查询当前库所有的key值exists 判断某个键是否存在 1 代表存在 0代表不存在type 查看键的类型del 删除某个键expire 为键值设置过期时间,单位秒ttl 查看还有多少秒过期,-1表示永不过期,-2表示已过期dbsize 查看当前数据库的key的数量flushdb 清空当前库flushall 通杀全部

2021-04-14 10:42:00 96 2

原创 Redis与Memcached的异同

redis和memcached的主要区别:Redis是一个开源的内存数据结构存储,用作数据库,缓存和消息代理;Memcached是一个免费的开源高性能分布式内存对象缓存系统,它通过减少数据库负载来加速动态Web应用程序。Redis与Memcached的相似之处:**● Redis和Memcached都是内存数据存储系统,都用作内存中的键值数据存储。● Redis和Memcached都属于NoSQL系列数据管理解决方案,两者都基于键值数据模型。● Redis和Memcached都将所有数据保存在RA

2021-04-09 10:32:34 99

原创 redis相关配置介绍

默认情况bind=127.0.0.1只能接受本机的访问请求不写的情况下,无限制接受任何ip地址的访问生产环境肯定要写你应用服务器的地址如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的相应tcp-backlog默认是511可以理解是一个请求到达后至到接受进程处理前的队列backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列高并发环境tcp-backlog 设置值跟超时时限内的Redis吞吐量决定t..

2021-04-09 10:27:28 45

原创 Redis安装

Redis安装将tar文件 放入linux 虚拟机下的 /opt路径下linux的操作命令1、cd /opt2、解压命令:tar -zxvf redis-3.2.5.tar.gz3、解压完成后进入目录:cd redis-3.2.54、在redis-3.2.5目录下执行make命令 如果报错gcc 未找到运行yum install gcc yum install gcc-c++如果报 jemalloc/jemalloc.h:没有那个文件或目录make MALLOC=libc//m

2021-04-09 09:47:33 124

空空如也

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

TA关注的人

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