
Redis
文章平均质量分 66
yan_pengfei
这个作者很懒,什么都没留下…
展开
-
Redis 集群
Redis 主从复制(replication)主从复制配置例如一主多从,203 是主节点,在每个 slave 节点的 redis.conf 配置文件增加一行,slaveof 192.168.8.203 6379 // 在主从切换的时候,这个配置会被重写成: # Generated by CONFIG REWRITE replicaof 192.168.8.203 6379或者在启动服务时通过参数指定 master 节点: ./redis-server --slaveof 1...原创 2021-05-19 19:25:05 · 261 阅读 · 0 评论 -
Redis高级特性和原理
发布订阅模式Redis 提供了一组命令实现发布/订阅模式订阅者订阅频道:可以一次订阅多个,比如这个客户端订阅了 3 个频道subscribe channel-1 channel-2 channel-3发布者可以向指定频道发布消息(并不支持一次向多个频道发送消息):publish channel-1 2673取消订阅(不能在订阅状态下使用)unsubscribe channel-1按规则(Pattern)订阅频道支持?和*占位符。?代表一个字符,*代表 0 个或者多个字符原创 2021-05-19 09:59:03 · 140 阅读 · 0 评论 -
Redis基础篇数据结构
数据类型https://redis.io/topics/data-types-introString:二进制安全字符串。 Lists列表:根据插入顺序排序的字符串元素的集合。它们基本上是链表。 Sets集合:唯一,未排序的字符串元素的集合。 Sorted sets排序集合,类似于集合,但是每个字符串元素都与一个称为score的浮点数字值相关联。元素总是按照它们的分数排序,因此与Sets不同,可以检索一系列元素(例如,您可能会问:给我前10名或后10名)。 Hashes哈希,是由与值相关联的原创 2021-05-17 22:22:50 · 214 阅读 · 0 评论 -
分布式技术之限流
guava RateLimiter限流Nginx限流IP限流https://blog.youkuaiyun.com/chy2z/article/details/108369972 参看大神博客limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"。limit_req 配合 limit_req_zone 使用示例:limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1.原创 2021-02-23 10:21:14 · 219 阅读 · 0 评论 -
分布式技术之会话与CAS
什么是会话会话Session代表的是客户端与服务器的一次交互过程,这个过程可以是连续也可以是时断时续的.无状态会话HTTP请求是无状态的,用户向服务端发起多个请求,服务端并不会知道这多次请求都是来自同一用户,这个就是无状态的。cookie的出现就是为了有状态的记录用户.常见的,前后端分离交互,他们都是通过发起http来调用接口数据的,每次交互服务端都不会拿到客户端的状态,但是我们可以通过手段去处理,比如每次用户发起请求的时候携带一个userid或者user-token,如此一来,就能让服务端根据原创 2021-02-11 16:28:46 · 440 阅读 · 4 评论 -
高可用集群之redis(3)
缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。导致数据库压力过大。解决方法将key-value对写为key-null(空对象,空集合,空字符串),缓存有效时间可以设置短点 布隆过滤器缓存雪崩缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。解决方案永不过期 错开时间 多层缓存批量查询优化方案multiGet pipeline...原创 2021-02-04 19:57:23 · 105 阅读 · 0 评论 -
高可用集群之(2)redis哨兵模式
Redis 的哨兵模式Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是 Redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作配置哨兵监控master 普通配置port 26379pidfile "/usr/local/redis/sentinel/redis-sentinel.pid"dir "/usr/local/.原创 2021-02-04 19:21:46 · 152 阅读 · 0 评论 -
高可用集群之redis(1)
安装Redis下载官网:https://redis.io/download 选择下载稳定版本,不稳定版本可以尝鲜,但是不推荐在生产使用。 上传至linux安装1. 解压redis:tar -zxvf redis-5.0.5.tar.gz2. 安装gcc编译环境,如果已经安装过了,那么就是 nothing to doyum install gcc-c++3. 进入到 redis-5.0.5 目录,进行安装:make && make install执行完毕后安装成原创 2021-02-03 13:47:27 · 120 阅读 · 0 评论 -
Redis分布式锁实现以及避免死锁
分布式锁:当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问分布式锁应该具备哪些条件在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行 高可用的获取锁与释放锁 高性能的获取锁与释放锁 具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误) 具备锁失效机制,防止死锁 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败import com.demo.common.RedissonManager;import org.re..原创 2020-06-23 22:41:46 · 1326 阅读 · 0 评论 -
Redis学习之开发规范
key名设计可读性和可管理性,以业务名或数据库名为前缀防止key冲突,用冒号分隔。例子业务名:表名:id,比如ugc:video:1 简洁性,保证语义的情况下,尽量缩减key的长度 不要包含特殊字符,空格,换行,单双引号value的设计string类型控制在10kb,hash,list,set,zset元素个数不要超过5000big key 的发现:redis-cli --bigkeysdebug object keybig key 的删除 :scan 游标遍历删除命原创 2020-06-18 16:54:08 · 163 阅读 · 0 评论 -
Redis学习之布隆过滤器
实现原理:参数:m个二进制向量,n个预备数据,k个hash函数构建布隆过滤器:n个预备数据走一遍上面的过程判断元素存在:走一遍上面的过程,如果都是1,则表明存在反之不存在误差率:m/n与误差率成反比,k也是反比基于redis的布隆过滤器定义布隆过滤器构造函数;m,n,k,误差概率 定义布隆过滤器操作函数:add,contain 封装redis位图操作 开发测试样例...原创 2020-06-18 14:37:53 · 151 阅读 · 0 评论 -
Redis学习之缓存
缓存使用场景降级后端负载,对高消耗的sql结果缓存 加速请求响应,利用redis优化Io响应时间 大量写合并为批量写,如计数器先redis累加再批量写DB缓存更新策略LRU/LFU/FIFO算法剔除 超时剔除:expire 主动更新缓存穿透缓存和数据库都没有命中造成请求大量访问。解决方法:(一)缓存过期时间的空对象。(二)布隆过滤器拦截。缓存雪崩当缓存服务异常或者脱机,造成流量直接到DB.热点key的重建解决方案:(一)互斥锁(二)key永不过时,value.原创 2020-06-18 12:41:22 · 148 阅读 · 0 评论 -
Redis学习之redisCluster(一)
数据分区方式哈希取余:节点伸缩,数据节点关系变化,导致数据迁移 迁移数量和添加节点有关,建议翻倍扩容一致性哈希:哈希+顺时针(优化取余) 节点伸缩,只影响相邻的两个节点,但是还有数据迁移 翻倍伸缩,保证最小迁移数据和负载均衡虚拟槽分区预设虚拟槽,每个槽映射一个子集,一般比节点数大 良好的哈希函数,例如CRC16 服务端管理节点,槽,数据:例如redisCluster...原创 2020-06-17 14:10:38 · 168 阅读 · 1 评论 -
Redis学习之sentinel
安装与配置可以看到这里监控的只是master主节点。通过redis-sentinel 启动后查看info。会自动发现slave。客户端连接sentinel大体流程原创 2020-06-17 12:15:03 · 118 阅读 · 0 评论 -
Redis学习之复制的原理与优化
Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。一个master可以有多个slave 一个slave只能有一个master 数据流是单向的,master到slave两种实现方式:命令 slaveof 配置 slaveof ip port,slave-read-only yes全量复制全量复制的开销bgsave的时间 RDB文件网络的传输时间 从节点清空旧数据的时间 从节点加载RDB的时间 可能的AOF的.原创 2020-06-17 10:12:50 · 156 阅读 · 0 评论 -
Redis学习(三)之持久化
RDB快照触发机制:save同步会阻塞 bsave异步,fork主线程的子线程,中间生成临时rdb文件最后生成正式的rdb文件 自动最佳配置dbfilename dump-${port}.rdbdir /bigdiskpathstop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yes其它触发方式:全量复制,debug reload ,shutdownAOF...原创 2020-06-16 16:51:04 · 147 阅读 · 0 评论 -
Redis学习(二)
主要内容:慢查询,Bitmap,pipeline,HyperLogLog,发布订阅,Geo慢查询slowlog-max-len =128 //通常设置1000slowlog-log-slower-than = 10000 //通常设置1msslowlog-len //获取慢查询队列长度slowlog get [n] //获取慢查询队列slowlog reset //情况慢查询队列pipline 流水线1次pipline(n条命令) = 1次网络时间+n次命令时间...原创 2020-06-15 18:00:08 · 159 阅读 · 0 评论 -
Redis学习(一)
redis特性速度快:单线程,内存,C语言 持久化:rdb 和aof 多种数据结构:string,hash,zset,list.set 支持多种编程语言:java,python 功能丰富:发布订阅等 简单:代码少。 主从复制: 高可用分布式:常用场景:缓存,计数redis启动简单启动redis-server验证:ps -ef | grep redis 或者 netstat -antpl | grep redis 或者 redis-cli -h ip -p port...原创 2020-06-15 12:35:16 · 153 阅读 · 0 评论 -
Redis五种数据结构
redis所有的数据结构都以唯一的key字符串作为名称,然后通过这个key来获取value,不同的数据结构指的是value的结构不一样。String字符串结构Redis的字符串是动态的字符串,可以修改。当字符串长度小于1MB时,扩容是加倍现有的空间。如果字符串长度超过1MB时,只会扩容1MB的空间,需要注意的是字符串的长度最大为512MB。set name codeholeget n...原创 2019-09-17 15:14:17 · 681 阅读 · 1 评论