![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
银真
这个作者很懒,什么都没留下…
展开
-
【Redis】【28】底层数据结构字符串
1.Stringsds simple dynamic stringchar[] data = “abc”;字符数组,c语言字符数组最后会加个\0,如果字符串中包含了\0,数据会出问题int len;使用len长度,每次修改都需要重新分配长度int free; 用空间换时间预先分配多一点空间,减少重新分配的次数int 类型占4个字节,len和free用了8个字节比较消耗空间设计出不同长度位的字符串/** * flags 是一个无符号的char,占用8个字节 * 对于类型为sdshdr5的原创 2020-12-01 22:34:29 · 92 阅读 · 0 评论 -
【Redis】【27】主从复制原理
1.主从复制分两类全量复制、增量复制2.全量复制全量复制,新节点加入、或者断开很久超过1小时,或者缓存数据大于1m时触发1.slave发送psync命令到master2.master接受到命令后,执行bgsave生成rdb文件3.发送rdb给slave4.slave删除旧的数据,设置接收到的rdb数据5.master发送缓存数据给slave6.slave执行缓存数据7.每次master操作都同步发送一份到slave3.增量复制master有个缓存可以缓存1m的数据,默认会缓存一个小时原创 2020-11-28 01:05:41 · 90 阅读 · 0 评论 -
【Redis】【26】缓存穿透、击穿、雪崩、一致性
1.缓存穿透1.使用大并发访问不存在的key2.使用大并发访问很多不存在的key对于1可以缓存不存在的key,这样以后这个key存在了就不一致了对于2使用布隆过滤器,谷歌的jar包和redis的两种,jar包的会再每个jvm中都存储一份2.缓存击穿 缓存失效1.热点key值失效,大量请求打到mysql2.批量缓存可以失效,大量请求打到mysql对于批量缓存失效设计随机的过期时间对于热点key缓存失效,使用分布式锁,没有获取锁的线程做个自旋,获取锁后再从Redis获取一次3.Re原创 2020-11-17 00:37:34 · 279 阅读 · 0 评论 -
【Redis】【25】集群基础知识
1.哨兵模式和集群模式有什么不一样高可用:故障的时候哨兵无法提供服务,集群如果参数配置可以服务的话只有坏掉的主节点的槽无法提供服务当redis.conf的配置cluster-require-full-coverage为no负载均衡:集群可以方便的扩容1000个主2.集群底层存储原理16384个槽被多个主分配置key值通过hash后和16384-1做与运算计算出槽的位置做存储3.集群节点通讯默认使用集群端口号加10000做端口通讯,使用gossip协议4.网络抖动网络抖动会导致集群发生重新原创 2020-11-07 01:13:28 · 134 阅读 · 0 评论 -
【Redis】【23】集群添加一主一从,删除一主一从
在上一个博客基础上操作https://blog.csdn.net/huiyanshizhen21/article/details/1095235701.启动6007、6008,准备添加一主6007、一从6008/usr/local/redis-5.0.10/src/redis-server /usr/local/redis-cluster/6007/redis.conf/usr/local/redis-5.0.10/src/redis-server /usr/local/redis-cluster/原创 2020-11-07 00:55:39 · 163 阅读 · 0 评论 -
【Redis】【22】单机 Redis5.0集群安装
1.单机安装redis5.0yum install gcc tcl -ycd /usr/local/src && wget https://download.redis.io/releases/redis-5.0.10.tar.gz使用迅雷下载很快tar -zxvf redis-5.0.10.tar.gz ../cd /usr/local/src/redis-5.0.10 && make insatllvim /usr/local/src/redis-5.原创 2020-11-06 00:16:56 · 76 阅读 · 0 评论 -
【Redis】【21】查找key
keys *127.0.0.1:9879> help scanSCAN cursor [MATCH pattern] [COUNT count]summary: Incrementally iterate the keys spacesince: 2.8.0group: genericHashMap底层类时hashmap 结构查找时 cursor从0开始到0结束缺点可能会少扫描一部分1.扫描到一半的时候,在前半部分新增了2.扫描的过程中发生了rehash127.0.0.1:98原创 2020-11-01 01:12:10 · 114 阅读 · 0 评论 -
【Redis】【20】redis单线程为什么那么快
1.redis是单线程的吗redis执行命令是单线程的2.为什么单线程性能还很高1.使用内存2.IO多路复用1.连接服务器 10000个2.接受命令存储命令3.执行器读取命令4.执行命令原创 2020-11-01 01:11:16 · 60 阅读 · 0 评论 -
【Redis】【19】redis数据结构
String 缓存对象set user:1 yinzhen建议使用protobuffer做序列号也可以考虑加上属性来当keyset user:1:name yinzhenset user:1:age 18使用批量设置mset user:2:name yinzhen2 user:2:age 19mget user:2:name user:2:age计数器记录访问次数incr article:程序员的自我修养分布式id,一次获取1000个idincrby generate:order:原创 2020-11-01 01:09:29 · 112 阅读 · 0 评论 -
【redis】【18】redis和数据库数据一致性
发生在更新数据时1.先删除数据库或者先删除redis都会导致数据不一致1.先更新数据库,再删除redis 如果删除redis失败会导致数据不一致2.先删除reids,再更新数据库 有可能在删除redis和更新数据库之间被其他线程重建了redis缓存,会存在不一致的情况解决方案1:延时双删1.删除redis2.如果删除成功,更新数据库3.发送一个延时mq消息4.消费mq消息,把redis数据删除这一步必须保证成功,重试,如果还是失败记录日志...原创 2020-08-21 16:45:27 · 114 阅读 · 0 评论 -
【redis】【17】JedisCluster的底层存储
JedisCluster有个成员变量JedisClusterConnectionHandlerJedisClusterConnectionHandler中有个成员变量JedisClusterInfoCacheJedisClusterInfoCache中有两个map,一个是nodesMap,一个是soltsMap一个nodeMap中包含一个JedisPool连接池一个soltMap中引用对用node的连接池1.初始化JedisClusterpublic JedisCluster(Set<Ho原创 2020-08-08 23:41:24 · 184 阅读 · 0 评论 -
【Redis】【16】redis连接池的参数
maxTotal 连接池的最大连接数public static final int DEFAULT_MAX_TOTAL = 8;maxIdle 连接池的最大空闲数public static final int DEFAULT_MAX_IDLE = 8;minIdle 连接池的最小空闲数public static final int DEFAULT_MIN_IDLE = 0;maxWaitMillis 当连接池资源耗尽时,调用着最大等待时间,默认时一直等待public static原创 2020-08-07 23:21:56 · 1846 阅读 · 0 评论 -
【Redis】【15】Redis的list做队列,tx事务
@Testpublic void testRedisListStack(){ JedisCluster zwJedisCluster = JedisZwMuilClusterUtil.getJedisClusterInstance("1"); //list 队列 String listKey = "testList1"; zwJedisCluster.lpush(listKey,"1","2","3"); System.out.println(zwJedis原创 2020-07-24 14:45:10 · 183 阅读 · 0 评论 -
【Redis】【14】4.0 Redis的持久化
################################ SNAPSHOTTING ################################## Save the DB on disk:## save <seconds> <changes>## Will save the DB if both the given number of seconds and the given# number of write operations agai原创 2020-07-22 16:45:35 · 147 阅读 · 0 评论 -
【Redis】【13】4.0 最大内存淘汰策略
############################## MEMORY MANAGEMENT ################################# Set a memory usage limit to the specified amount of bytes.# When the memory limit is reached Redis will try to remove keys# according to the eviction policy selected (s.原创 2020-07-22 16:37:58 · 107 阅读 · 0 评论 -
【Redis】【12】集群不可用时,jedis 2.9.0版本超时时间12秒,升级版本修复
1. 2.9.0版本JedisSlotBasedConnectionHandler代码<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency> public Jedis getConnection() { // In an原创 2020-05-19 19:41:21 · 593 阅读 · 0 评论 -
【Redis】【11】redis有序集合zset
1.文档https://redis.io/http://redisdoc.com/http://redis.cn/topics/data-types-intro.html#hasheshttp://redis.cn/topics/data-types-intro.html#setshttp://redis.cn/topics/data-types-intro.html#sorted-setshttps://redis.io/commands/zaddhttp://redis.cn/com原创 2020-05-11 14:17:46 · 124 阅读 · 0 评论 -
【Redis】【10】JedisCluster catch异常递归重试源代码
使用catch异常,递归调用的方式来重试,当次数小于1时,抛出异常Too many Cluster redirections?private T runWithRetries(byte[] key, int redirections, boolean tryRandomNode, boolean asking) { if (redirections <= 0) { throw new JedisClusterMaxRedirectionsException("Too many C原创 2020-05-09 10:43:02 · 227 阅读 · 0 评论 -
【Redis】【09】集群模式redis使用JedisClusterUtil
1.在src/main/resources下新建配置文件config.propertiesredis.cluster.ip=192.168.204.125:7114,192.168.204.125:7115,192.168.204.125:7116,192.168.204.125:7111,192.168.204.125:7112,192.168.204.125:71132.引入jar包...原创 2020-05-08 16:48:30 · 811 阅读 · 0 评论 -
【Redis】【08】一台机器安装redis4.0伪三主三从集群,供开发使用
1.安装redis编译依赖的软件yum install gcc tcl -y2.下载redis到/usr/local/srccd /usr/local/src/ && wget http://download.redis.io/releases/redis-4.0.1.tar.gz3.解压tar -zxvf redis-4.0.1.tar.gz -C /usr/loc...原创 2020-05-08 15:13:19 · 584 阅读 · 0 评论 -
【Redis】【07】redis哨兵安装
1.哨兵的作用1.监控redis的监控状况2.当redis发生故障时,选举出一个主redis,并通过发布订阅的方式修改配置文件中监控的主机2.故障转移1.主动下线:当主服务器发生故障时,哨兵1检查到主服务器故障,这时不会发生故障转移,只是哨兵1主观的认为redis不可以用,这种现在叫做主动下线2.被动下线:当其他哨兵也监控到主服务器发生故障,当哨兵的数达到一定的个数(sentinel m...原创 2020-05-07 20:37:50 · 129 阅读 · 0 评论 -
【Redis】【06】redis序列号优化protostuff
1.protostuff的性能序列化性能比较比jdk自带的性能高,占用内存小https://github.com/eishay/jvm-serializers/wiki2.引入pom<!-- https://mvnrepository.com/artifact/com.dyuproject.protostuff/protostuff-core --><dependenc...原创 2020-05-06 18:04:33 · 391 阅读 · 0 评论 -
【Redis】【05】哨兵模式redis使用JedisSentinelPoolUtil
1.配置文件redis.sentinel.ip=ip1:26379,ip2:26379,ip3:26379redis.sentinel.password=xxxxredis.sentinel.masterName=mymaster2.代码package com.xhl.cuss.common.redis;import java.util.Arrays;import java.ut...原创 2020-04-26 16:55:02 · 212 阅读 · 0 评论 -
【Redis】【04】单节点使用JedisPoolUtil
1.配置文件config.propertiesredis.ip=ip1redis.port=portredis.password=xxxx2.代码package com.xhl.cuss.common.redis;import java.util.ResourceBundle;import redis.clients.jedis.Jedis;import redis.cl...原创 2020-04-26 16:53:46 · 174 阅读 · 0 评论 -
【Redis】【01】Redis 4.0 单节点安装
1.安装编译依赖包yum install gcc tcl -y2.下载编译2.1创建redis文件夹mkdir /usr/local/redis2.2 下载redis文件cd /usr/local/src/ &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; wget http://download.redis.io/releases/redis-4.0.1.tar.gz2.3解压redistar -zx...原创 2019-01-16 11:14:52 · 387 阅读 · 0 评论 -
【Redis】【02】Redis Springboot使用
1.添加pom&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&amp;amp;lt;project xmlns=&amp;quot;http://maven.apache.org/POM/4.0.0&amp;quot;原创 2019-01-24 14:53:28 · 110 阅读 · 0 评论 -
【Redis】【03】Redis分布式锁
String key = xxxx;long count = redisTemplate.opsForValue().increment(key, 1);if(count==1){//设置有效期redisTemplate.expire(key, 60, TimeUnit.SECONDS);//进行业务操作}原创 2018-11-21 12:03:52 · 271 阅读 · 0 评论