Redis简单操作记录

Redis事务

1.Redis事务本质:一组命令的集合,加入队列,然后执行,执行完事务结束。

redis事务:

①开启事务:multi

②命令入队:set key1 v1 set key2 v2 .。。get...

③执行事务:exec

取消事务:discard,所有事务中入队的命令都不会执行

注意:如果在②时候命令错误,exec所有的命令都不会被执行,如果是命令没错运行出错的话,其他命令可以执行。

watch用来监控事务:

image-20210310150237039.png

可以用来做乐观锁操作,如果exec执行之前,另外一个事务对money进行操作并且执行完了,此时这里再exec的话就会执行失败。

如何解决?

首先放弃watch监视 unwatch,即解锁,再重新watch,如果再失败就再解锁再加锁,有种自旋锁的味道。


jedis 操作事务:

image-20210310152412821.png

SpringBoot整合Redis

SpringBoot 2.x之后默认不用jedis,替换为lettuce?

jedis:采用直连,多线程操作不安全,如何避免?使用jedis pool

lettuce:采用netty,实例可以多线程共享,不存在线程安全问题,可以减少线程数据。

源码分析:

image-20210310153226478.png

在导入starter包后会发现底层还是用的lettuce进行操作的,虽然也有jedis的实现,但是并没用

可以用spring自带的RedisTemplate也可以自己定义,自己定义则自带的就会失效:

,这里定义了一个jackson序列化的方法。

image-20210310154727484.png
image-20210310155107975.png

redis.conf了解:

bind 127.0.0.1  绑定的ip

protected-mode no 保护模式

port 端口

通用:GENERAL

daemonize yes

pidfile /var/run/redis_6379.pid
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably) 生产环境
# warning (only very important / critical messages are logged)
loglevel notice

logfile "" 日志文件位置名

databases 16 默认16个数据库

快照:SNAPSHOTTING
save 900 1  900s内 如果至少有一个key进行修改,则持久化
save 300 10 300s内 至少10个key就行操作,则进行持久化
save 60 10000 。。。同理

stop-writes-on-bgsave-error yes 持久化出错继续工作
rdbcompression yes 是否压缩RDB文件,需要消耗一些cpu资源
rdbchecksum yes 保存RDB文件时,自动检查校验
dir ./ rdb文件保存路径

REPLICATION 主从复制

安全:SECURITY
设置redis密码

MEMORY MANAGEMENT
maxmemory <bytes> redis配置最大的内存容量
maxmemory-policy noeviction 内存达到上限时的处理策略
    1、volatile-lru:只对设置了过期时间的key进行LRU(默认值) 
    2、allkeys-lru : 删除lru算法的key   
    3、volatile-random:随机删除即将过期key   
    4、allkeys-random:随机删除   
    5、volatile-ttl : 删除即将过期的   
    6、noeviction : 永不过期,返回错误

AOF:APPEND ONLY MODE
appendonly no 默认不开启,默认rdb模式,一般情况下rdb就够用了
appendfilename "appendonly.aof"
# appendfsync always  每次修改都会同步
appendfsync everysec 默认每秒执行一次
# appendfsync no  不同步

RDB持久化

在指定时间间隔内将内存中的数据集体写入磁盘,父进程会fork一个子进程讲内存内同写入rdb文件,主进程是不进行ID操作的。

最后一次持久化的话:如果宕机就会缺失一些数据。

rdb的dump.rdb文件什么时候产生?

save时,redis关闭时,flushall时

AOF 追加

将我们所有命令记录下来,除了读操作,redis重新执行命令,会很慢,默认不开启。

如果开启了aof,aof文件有错误则是启动不了redis的,此时可以用redis目录下的redis-check-aof可以进行修复,命令:redis-check-aof --fix appendonly.aof


Redis发布订阅

Redis发布订阅(pub/sub)是一种消息通信模式。

发布者+频道


image-20210310181937543.png

测试:


image-20210310182408518.png

原理:通过SUBSCRIBE命令订阅某频道后,redis-server里维护了一个字典,字典就是一个个频道,字典的值是一个链表,链表中保存了所有订阅这个channel的客户端,SUBSCRIBE命令的关键就是将客户端添加到给定的channel中的订阅链表中。

通过PUBLISH命令向订阅者发送消息,redis-server会使用给定的频道作为键,在它所维护的channel中查找记录了订阅这个频道的所有客户端链表,遍历这个链表,将消息发送给所有订阅者。

Redis集群

正常最少需要一主二从。

环境配置:只配从库,不用配置主库。

通过info replication查看主从信息,

复制3个redis.conf,并修改

①端口

②pid名字

③log文件名

④dump.rdb名字

修改完毕之后 通过 redis-server set/redis6379.conf 启动各个redis。

如何配置从机?

比如有6379/6380/6381三个服务

在6380中执行slaveof 127.0.0.1 6379 意思就是找6379这个作为自己的老大,这个是通过命令配置的,是暂时的,其实应该在redis.conf文件中配置(replicaof <masterip> <masterport>)。

主机写从机读取。

如果主机断了,可以通过slaveof no one 让自己变成主机,如果此时与哪来的老大又回来了,那也没用了。

哨兵模式

与上述手动切换主从的繁琐流程,redis使用sentinel哨兵模式来智能化选举老大。

如何开启?

在bin目录下有一个redis-sentinel,如我们上面说的最少三个进程来完成主从,那么哨兵也需要最少三个。

①.在redis.conf同级目录下新建哨兵的配置sentinel.conf,多个就配置多个

sentinel monitor myredis 127.0.0.1 6379 1 myredis是被监控的名称,1代表主机挂了,slave投票让谁接替主机

②.启动哨兵

redis-sentinel


微信图片_20210311085059.png

Redis缓存穿透和雪崩

①.穿透(查不到)如何解决:BloomFilter或者在缓存中加一个空对象,不让查询进入数据库查询

缓存击穿(量太大):指的是一个key非常热点,不停的高并发集中一个点访问;

如何解决?设置永不过期/加互斥锁

②.缓存雪崩:某个时间段缓存集中过期失效;

如何解决?多搭建几台redis异地多活/限流降级/数据预热(先访问一边加载到缓存中)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • Redis NoSOL特点 方便扩展 大数据量性能高 数据类型多样 RDBMS与NoSQL的区别RDMBS-结构化...
    过期罐头阿卓阅读 553评论 0 0
  • 01.NoSQL入门概述-上 1.互联网时代背景下大机遇,为什么用NoSQL 1.单机MySQL的美好年代 在90...
    ytyt1313阅读 214评论 0 0
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,936评论 2 27
  • 简介 AUTOBEAR的NOSQL型数据库的个人学习笔记,本笔记随时增添,用来巩固知识,查缺补漏。 基础概念 BS...
    AUTOBEAR阅读 303评论 0 0
  • 夜莺2517阅读 127,695评论 1 9