![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 82
redis
jiqiren1994
基本所有文章都是总结性质得文章,将网上大部分博主的内容整合了一下,加入了部分自己的理解,方便自己工作时查阅资料用,好处就是不用忘记了去搜各种文章。
展开
-
redis 分布式锁
一、watch利用Watch实现Redis乐观锁乐观锁基于CAS(Compare And Swap)思想(比较并替换),是不具有互斥性,不会产生锁等待而消耗资源,但是需要反复的重试,但也是因为重试的机制,能比较快的响应。因此我们可以利用redis来实现乐观锁。具体思路如下:1、利用redis的watch功能,监控这个redisKey的状态值2、获取redisKey的值3、创建redis事务4、给这个key的值+15、然后去执行这个事务,如果key的值被修改过则回滚,key不加1Redis乐观原创 2021-02-26 00:32:41 · 215 阅读 · 0 评论 -
redis 缓存问题及解决方案
一、缓存穿透一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。缓存穿透是指在高并发下查询key不存在的数据,会穿过缓存查询数据库。导致数据库压力过大而宕机解决方案对查询结果为空的情况也进行缓存,缓存时间(ttl)设置短一点,或者该key对应的数据insert了之后清理缓存。问题:缓存太多空值占用了更多的空间使用布隆过滤器。在缓存之前在加一层布隆过滤器,在查询的时候先去布隆过滤器查询 key 是否存在,如果不存在就直接返回,存在再查缓存原创 2021-02-26 00:11:30 · 1381 阅读 · 1 评论 -
redis 发布与订阅
一、简介Redis提供了发布订阅功能,可以用于消息的传输Redis的发布订阅机制包括三个部分,publisher,subscriber和Channel发布者和订阅者都是Redis客户端,Channel则为Redis服务器端。发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息二、频道/模式的订阅与退订subscribe:订阅 subscribe channel1 channel2 …Redis客户端1订阅频道1和频道2publish:发布消息 publish chann原创 2021-02-25 23:51:03 · 206 阅读 · 0 评论 -
redis 事务学习
一、事务所谓事务(Transaction) ,是指作为单个逻辑工作单元执行的一系列操作二、ACID回顾Atomicity(原子性):构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。Consistency(一致性):数据库在事务执行前后状态都必须是稳定的或者是一致的。Isolation(隔离性):事务之间不会相互影响。Durability(持久性):事务执行成功后必须全部写入磁盘。三、Redis事务Redis的事务是通过multi、exec、discard和watc原创 2021-02-25 23:44:20 · 193 阅读 · 0 评论 -
redis 集群与分区学习
分区的意义性能的提升单机Redis的网络I/O能力和计算资源是有限的,将请求分散到多台机器,充分利用多台机器的计算能力可网络带宽,有助于提高Redis总体的服务能力。存储能力的横向扩展即使Redis的服务能力能够满足应用需求,但是随着存储数据的增加,单台机器受限于机器本身的存储容量,将数据分散到多台机器上存储使得Redis服务可以横向扩展。分区的方式1. 范围分区根据分区键(id)进行分区:根据id数字的范围比如1–10000、100001–20000…90001-100000,每原创 2021-02-25 22:25:55 · 197 阅读 · 0 评论 -
redis 主从及哨兵Sentinel学习
一、主从复制Redis支持主从复制功能,可以通过执行slaveof(Redis5以后改成replicaof)或者在配置文件中设置slaveof(Redis5以后改成replicaof)来开启复制功能。主从配置主Redis配置,无需特殊配置从Redis配置,修改从服务器上的 redis.conf 文件:# slaveof <masterip> <masterport> # 表示当前【从服务器】对应的【主服务器】的IP是192.168.10.135,端口是6379。 r原创 2021-02-25 16:56:09 · 148 阅读 · 0 评论 -
Redis Cluster 常用命令总结
一、Redis Cluster集群所独有的,执行下面命令需要先登录redis客户端登录命令:redis-cli -c -p port -h ip集群cluster info :打印集群的信息cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。节点cluster meet :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。cluster forget <node_id> :从集群中移除 node_id 指原创 2021-02-25 15:02:13 · 3697 阅读 · 0 评论 -
linux 上安装redis
一、下载redis安装包redis安装包可以直接在redis官网下载,也能使用以下得命令进行下载,但是都很慢。$ wget https://download.redis.io/releases/redis-6.2.0.tar.gz$ tar xzf redis-6.2.0.tar.gz$ cd redis-6.2.0$ make二、解压并安装相关环境tar -zxvf redis-4.0.6.tar.gz安装gcc环境yum install gcc三、执行编译进入解压好的 re原创 2021-02-24 21:57:46 · 79 阅读 · 0 评论 -
redis cluster集群搭建
官方cluster分区Redis3.0之后,Redis官方提供了完整的集群解决方案。方案采用去中心化的方式,包括:sharding(分区)、replication(复制)、failover(故障转移)。称为RedisCluster。Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持Redis5.0可以直接使用Redis-cli进行集群的创建和管理部署架构...原创 2021-02-23 23:59:32 · 157 阅读 · 0 评论 -
Redis持久化
为什么要持久化Redis是内存数据库,宕机后数据会消失。Redis重启后快速恢复数据,要提供持久化机制Redis持久化是为了快速的恢复数据而不是为了存储数据Redis有两种持久化方式:RDB和AOFRDBRDB(Redis DataBase),是redis默认的存储方式,RDB方式是通过快照( snapshotting )完成的。触发快照的方式符合自定义配置的快照规则执行save或者bgsave命令执行flushall命令执行主从复制操作 (第一次)RDB执行流程(原理)RD原创 2021-02-23 23:47:04 · 56 阅读 · 0 评论 -
redis 缓存过期和淘汰策略
一、maxmemory不设置的场景Redis的key是固定的,不会增加Redis作为DB使用,保证数据的完整性,不能淘汰 , 可以做集群,横向扩展缓存淘汰策略:禁止驱逐 (默认)设置的场景Redis是作为缓存使用,不断增加Keymaxmemory : 默认为0 不限制问题:达到物理内存后性能急剧下架,甚至崩溃内存与硬盘交换(swap) 虚拟内存 ,频繁IO 性能急剧下降设置多少?与业务有关1个Redis实例,保证系统运行 1 G ,剩下的就都可以设置Redis物理内存的3/4二、原创 2021-02-23 23:37:42 · 150 阅读 · 0 评论 -
redis 底层数据结构
Redis作为Key-Value存储系统,数据结构如下:Redis没有表的概念,Redis实例所对应的db以编号区分,db本身就是key的命名空间。RedisDB结构Redis中存在“数据库”的概念,该结构由redis.h中的redisDb定义。当redis 服务器初始化时,会预先分配 16 个数据库所有数据库保存到结构 redisServer 的一个成员 redisServer.db 数组中redisClient中存在一个名叫db的指针指向当前使用的数据库RedisDB结构体源码:typ原创 2021-02-23 23:08:19 · 295 阅读 · 0 评论 -
redis 数据类型学习
Redis简介Redis是一个Key-Value的存储系统,使用ANSI C语言编写。key的类型是字符串。value的数据类型有:常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。不常见的:bitmap位图类型、geo地理位置类型。Redis5.0新增一种:stream类型注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)Redis的Key的设计用:分割把表名原创 2021-02-23 22:39:22 · 110 阅读 · 0 评论 -
缓存架构的设计思路
缓存的整体设计思路包括:1、多层次分布式缓存宕机,本地缓存还可以使用2、数据类型简单数据类型Value是字符串或整数或二进制,Value的值比较大(大于100K),只进行setter和getter,可采用Memcached。Memcached纯内存缓存,多线程 K-V。复杂数据类型Value是hash、set、list、zset,需要存储关系,聚合,计算,可采用Redis。3、要做集群分布式缓存集群方案(Redis)codis哨兵+主从RedisCluster4、缓存的数据结构设原创 2021-02-23 22:23:08 · 580 阅读 · 0 评论 -
缓存的读写模式
缓存有三种读写模式Cache Aside Pattern(常用)Read/Write Through PatternWrite Behind Caching Pattern一、Cache Aside Pattern(常用)Cache Aside Pattern(旁路缓存),是最经典的缓存+数据库读写模式。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时候,先更新数据库,然后再删除缓存。为什么是删除缓存,而不是更新缓存呢?1、缓存的值是一个原创 2021-02-23 22:19:24 · 384 阅读 · 0 评论 -
缓存原理&设计
一、生产中遇到的缓存问题(大厂常见面试题)系统在某个时刻访问量剧增(热点新闻),造成数据库压力剧增甚至崩溃,怎么办?什么是缓存雪崩、缓存穿透和缓存击穿,会造成什么问题,如何解决?什么是大Key和热Key,会造成什么问题,如何解决?如何保证 Redis 中的数据都是热点数据?缓存和数据库数据是不一致时,会造成什么问题,如何解决?什么是数据并发竞争,会造成什么问题,如何解决?单线程的Redis为什么这么快?Redis哨兵和集群的原理及选择?在多机Redis使用时,如何保证主从服务器的数据一致原创 2021-02-23 22:10:10 · 193 阅读 · 0 评论