![](https://img-blog.csdnimg.cn/20200524060955203.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
[015]Redis
分享&学习
Zero Ice
编辑&代码艺术
展开
-
[015]Redis | 哨兵模式
一、概念Redis-Sentinel(哨兵模式)是高可用的解决方案,当redis在做master-slave(主从)的高可用方案时,假如master宕机了,Redis本身(以及很多客户端)都没有实现进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis集群可通讯的机器中监控集群二、哨兵功能的描述监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。 自动故障转移(Automatic failover):当主节点不能正常工作..原创 2020-06-01 08:52:34 · 151 阅读 · 0 评论 -
[015]Redis | 缓存雪崩&解决方案
一、概念缓存存在大量失效的时候,引起大量查询数据库如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都会给数据库,造成了缓存雪崩现象二、解决方案锁机制/队列串行访问 缓存失效时间均匀分布加锁排队:在缓存失效后,通过加锁或者队列来控制数据库写缓存的线程数量。 数据预热:通过缓存reload机制,预先更新缓存,在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间尽量均匀!!!...原创 2020-06-01 04:58:00 · 195 阅读 · 0 评论 -
[015]Redis | 缓存穿透&解决办法
一、概念缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。造成缓存穿透!!!当不法分子利用不存在的key对其频繁请求,可能DB就要挂掉了!!!二、解决办法布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力 将空值进行缓存,设置过期时间 对字段进行加密..原创 2020-06-01 04:43:38 · 153 阅读 · 0 评论 -
[015]Redis | 持久化(RDB&AOF)
目录一、What's 持久化?1.1Redis层面二、Redis怎样持久化?三、RDB3.1save命令3.2bgsave命令3.3服务器配置自动触发3.4优缺点3.4.1优点3.4.2缺点四、AOF4.1flushAppendOnly功能4.2fsync策略4.3AOF文件重写策略4.3.1自动重写4.3.2手动重写4.4AOF文件修复策略4.5优缺点4.5.1优点4.5.2缺点一、What's 持久化?备注..原创 2020-05-28 11:08:36 · 164 阅读 · 0 评论 -
[015]Redis | 内存大小单位转换
1k => 1000 bytes1kb => 1024 bytes1m => 1000000 bytes1mb => 1024*1024 bytes1g => 1000000000 bytes1gb => 1024*1024*1024 bytes注意:对于大小敏感:1GB1Gb1gB一样!!!上面代码来自于《Github-Redis》...原创 2020-05-27 22:39:14 · 414 阅读 · 0 评论 -
[015]Redis | 事务(四)-应用场景
一、背景在此之前,可以先阅读以下前几篇总结:[015]Redis | 事务(一)-简单说明 [015]Redis | 事务(二)-两种错误处理 [015]Redis | 事务(三)-Watch解决问题二、应用场景秒杀系统 支付系统原创 2020-05-27 10:50:41 · 535 阅读 · 0 评论 -
[015]Redis | 事务(三)-Watch解决问题
一、背景在事务执行之前有其他命令修改了key值首先我们开两个客户端:原创 2020-05-27 10:17:31 · 189 阅读 · 0 评论 -
[015]Redis | 事务(二)-两种错误处理
一、命令错误执行如果执行命令出了错误(语法问题),则只有报错的命令不会被执行,而其他命令可以执行,不会回滚!!!二、命令报告错误如果队列中出现了报告错误,执行时整个队列全部都会被取消!!!...原创 2020-05-27 09:48:19 · 313 阅读 · 0 评论 -
[015]Redis | 事务(一)-简单说明
一、Redis事务备注:以上图片来源于《Redis官网-Redis 事务》二、举例消费者b向生产者a购买了25块钱的东西!!!三、取消事务举例:某消费者(b)去某大型超市(A)买东西,但是消费者最后不想买了(没去结账)!!!...原创 2020-05-27 09:31:13 · 219 阅读 · 0 评论 -
[015]Redis | 多数据库应用场景
存放不同类别的数据:存放不同环境下的数据:或者其他...原创 2020-05-27 09:00:07 · 129 阅读 · 0 评论 -
[015]Redis | 发布订阅应用场景
一、发布订阅备注:上图来源于《Redis官网-Redis 发布订阅》二、应用场景 构造实时消息系统,例如:即时聊天,群聊 文章推送 集中配置中心管理,当配置信息发生更改后,订阅配置信息的节点都可以收到 ...原创 2020-05-27 08:47:45 · 153 阅读 · 0 评论 -
[015]Redis | HyperLogLog应用场景
一、HyperLogLog备注:上图来源于《Redis官网-Redis HyperLogLog》二、为什么要使用HyperLogLog?HyperLogLog是一种算法,并非redis独有 目的是做基数统计,故不是集合,不会保存元数据,只记录数量而不是数值。 耗空间极小,支持输入非常体积的数据量 核心是基数估算算法,主要表现为计算时内存的使用和数据合并的处理。最终数值存在一定误差。 redis中每个hyperloglog key占用了12K的内存用于标记基数(官方文档)..原创 2020-05-27 08:23:55 · 194 阅读 · 0 评论 -
[015]Redis | Zset应用场景
一、Zset注意:有序集合的成员是唯一的,但是分数(score)可以不唯一!!!来源于菜鸟教程备注:上图来源于《菜鸟教程-Redis 有序集合(sorted set)》二、应用场景常用于:排行榜!!!销量排名、积分排名、成绩排名等...发表时间作为score存储,这样子获取的时候就是自动排好序的 成绩作为score 带权重队列,让重要的任务优先执行...原创 2020-05-26 11:54:03 · 1371 阅读 · 0 评论 -
[015]Redis | Set应用场景
一、Set来自于菜鸟教程备注:上图来源于《菜鸟教程-Redis 集合(Set)》二、应用场景常用于:对两个集合间的数据进行交集、并集、差值运算利用集合获取不同兴趣圈子的交集,以非常方便的实现如共同爱好、共同喜爱、二度好友等 利用唯一性,统计访问网站的所有独立IP、获取当天的活跃用户列表。...原创 2020-05-26 11:26:05 · 240 阅读 · 0 评论 -
[015]Redis | List应用场景
一、List高级功能:备注:上面只是给出一个例子,详细的请看:《菜鸟教程-Redis 列表(List)》二、应用场景对数据量大的集合数据删减列表数据显示、关注列表、粉丝列表、留言列表(每篇博文的评论也可以存入一个单独的list中)等...分页(LRANGE指令)、热点新闻(Top 10)等任务队列可以用来实现一个消息队列,而且可以确保先后顺序,而不用通过ORDERBY来排序实现(例如:MySQL)什么是任务队列?用于需要推迟执行那些需要...原创 2020-05-26 10:43:11 · 1061 阅读 · 0 评论 -
[015]Redis | 总结篇
《[015]Redis | 启动服务端&启动客户端&检查服务端是否启动》 《[015]Redis | Redis配置文件获取(Centos7)》 《[015]Redis | Redis配置文件(一)》 《[015]Redis | Redis配置文件(二)》 《[015]Redis | 内存淘汰策略》 《[015]Redis | 断电 VS 正常关机》 《[015]Redis | Docker安装Redis》 《[015]Redis | 常用命令key管理》 《[015]Red原创 2020-05-25 10:37:31 · 341 阅读 · 0 评论 -
[015]Redis | Hash类型应用场景
一、Hash应用场景存储一个用户信息(存储一个对象) 可以对某个字段进行自减/自增一个数!!! 为什么不用string存储一个对象?Hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中的一个对象转换成hashmap存放在Redis中!!!!用户ID为查找的key,存放的value用户包括姓名、年龄、生日等信息,如果用普通的key/value结构来存储,主要有两种方式将用户ID作为查找的key,把其他信息封装成一个对象以序列化的方式存储(增加了序列化/反序列化的开..原创 2020-05-25 10:22:28 · 460 阅读 · 0 评论 -
[015]Redis | String类型应用场景
一、应用场景String通常用于保存单个字符串或者JSON字符串类型 可以把一个图片文件的内容作为字符串来存储(String是二进制安全的!!!) 计数器(常规的key-value缓存应用。常规计数:微博数、粉丝数)备注:INCR等指令本身就是具有原子性,所以可以利用Redis的INCR(自增1,不存在=>初始化为0)、INCRBY(增加指定的数)、DECR(自减一)、DECRBY(减指定的数)等指令来实现原子计数的效果。假如,在某种场景下有3个客户同时对某个key对应的值(值为2)进原创 2020-05-25 09:45:50 · 140 阅读 · 0 评论 -
[015]Redis | Key命令注意事项
四个命名建议:key不太太长,尽量不超过1024字节(耗内存&降低查找速率) key不太太短(可读性问题) 统一命名规则(user:123:password) key名称区分大小写原创 2020-05-25 08:55:18 · 193 阅读 · 0 评论 -
[015]Redis | 常用命令key管理
目录1、keys *2、exists key3、expire key second4、del key5、ttlkey6、persist key7、PEXPIREkey milliseconds8、select9、movekeydbindex10、randomkey11、renamekeykey212、echo13、dbsize14、info15、configget *16、flushdb17、flusha...原创 2020-05-25 08:47:30 · 190 阅读 · 0 评论 -
[015]Redis | Docker安装Redis
一、基础运行redis-server# 启动Docker服务systemctl docker# 拉取Redisdocker pull redis# 查看启动情况docker images# 开启redis-server服务docker run -d --name redis-6379 -p 6379:6379 redis --requirepass "tw"# 通过redis-cli客户端连接Redisdocker exec -it redis-6379 redis-cli原创 2020-05-25 08:04:45 · 93 阅读 · 0 评论 -
[015]Redis | 断电 VS 正常关机
一、背景关于数据同步策略,请查看《[015]Redis | Redis配置文件(一)》上说明,900秒内假如有一个更改,则会自动同步到数据文件中,但是假如在这900s内断电了会导致什么情况呢?下面我们来验证一下二、断电处理这里的断电处理,表示的是进程被强制杀掉!!!首先我们先启用Redis服务端服务!!!客户端进行连接并且插入一条数据:此时我们杀掉Redis服务端进程!!!再重启Redis服务端服务:在客户端进行查看:发现key为name...原创 2020-05-24 11:49:59 · 535 阅读 · 0 评论 -
[015]Redis | 内存淘汰策略
一、两种策略设置过期时间 LRU算法动态删除数据二、设置过期时间# expire key time(以秒为单位)# 例:expire name 10具体演示如下:除了上面以外还存在一种字符串特有的方式:# 格式: setex(String key, int seconds, String value)详细的请自己查阅资料!!!三、LRU算法动态删除数据说明:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU操作系统会..原创 2020-05-24 11:22:56 · 181 阅读 · 0 评论 -
[015]Redis | Redis配置文件(二)
# 1.指定本地数据库文件名,默认dump.rdbdbfilename dump.rdb# 2.指定本地数据库存放目录dir ./# 3.设置当本机slave服务时,设置master服务的IP地址及端口,在Redis启动时# 它会自动从master进行数据同步slaveof <masterip> <masterport># 4.当master服务设置了密码保护时,slave服务连接master的密码masterauth <master-password&.原创 2020-05-24 10:30:18 · 218 阅读 · 0 评论 -
[015]Redis | Redis配置文件(一)
由于Redis配置文件内容太多,这里仅仅记录一些常用配置!!!# 1.守护进程(默认关闭)daemonize no# 2.pid写入目录(当Redis以守护进程运行的时候,Redis默认会把pid写入/var/run/redis.pid)# 可以通过pidfile指定pidfile /var/run/redis.pid# 3.指定Redis监听端口,默认6379port 6379# 4.绑定主机地址bind 127.0.0.1# 5.当客户端闲置多长时间后关闭连接. 0 =&原创 2020-05-24 09:28:27 · 214 阅读 · 0 评论 -
[015]Redis | Redis配置文件获取(Centos7)
在解压目录下将redis.conf配置文件拷贝到Redis安装目录!!!下面是我的解压目录:我的安装目录在/usr/local/redis:所以我先回到我的解压目录(/data/redis-5.0.8/),然后将redis.conf拷贝到/usr/local/redis具体如下:# 回到Redis解压目录cd /data/redis-5.0.8/# 将redis.conf拷贝到安装目录下cp redis.conf /usr/local/redis/# 检查是否拷贝成功原创 2020-05-24 08:51:02 · 602 阅读 · 0 评论 -
[015]Redis | 启动服务端&启动客户端&检查服务端是否启动
一、前提 已经安装Redis 进入Redis目录下 二、启动服务端执行命令:# 启动服务端./bin/redis-server显示下面,说明启动成功:三、启动客户端执行以下命令:# 启动客户端的命令语法# redis-cli -h IP地址 -P 端口# 默认IP本地地址 端口6379./bin/redis-cli注意:需要重新开一个窗口运行上面命令,不可以关闭原本Redis启动的服务测试:四、检测是否服务端启动..原创 2020-05-24 06:25:03 · 399 阅读 · 0 评论