redis 简单记录

redis关注点:

1、redis命令:Redis 命令参考 — Redis 命令参考

字符串:SET key value [EX seconds] [PX milliseconds] [NX|XX]

hash表:HSET hash field value

列表:LPUSH key value [value …]

集合:SADD key member [member …]

有序集合:ZADD key score member [[score member] [score member] …]

集合有交集、并集、差集等操作,注意有序集合是有score的,区别下无序集合。

结合整体用法可以实现购物车、抢红包、点赞、投票等功能。

2、存储机制:

从 redis 的官网查阅了相关资料,在 3.2 版本以后,redis 提供了 quicklist 内部编码,它结合了 ziplist 和 linkedlist 两者的优势,之前的 ziplist 是存在 BUG的,使用 quicklist 内部编码效率更高,所以我们现在 3.2 以后看不到这两个编码,只看到quicklist, 英语好的同学可以看一下https://matt.sh/redis-quicklist国外的这篇博客有重点提到

3、 持久化机制:ADB 和AOF

4、lua脚本(需要安装,很小,http://www.lua.org/ftp/lua-5.3.5.tar.gz )

Lua 教程 | 菜鸟教程

减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行

原子操作,redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件

复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑

运行lua:   eval "return redis.call('get',KEYS[1])" 1 name //eval+脚本+KEYS[1]+键个数+键 

/redis-cli -h 192.168.42.111 -a 12345678 script load "$(cat xxxx.lua)" //将LUA脚本内容加载到redis, 得到 返回的sha1值: xxxxxx

evalsha xxxxxxcount  param...


5、关注redis慢查询

  设置时间:slowlog-log-slower-than

  获取超时查询:slowlog get

6、redis性能测试 --redis-benchmark 

  Redis 服务器与客户端通过 RESP(REdis Serialization Protocol)协议通信。底层采用tcp方式,如serverSocket。

   A、redis-benchmark -h 192.168.42.111 -p 6379 -c 100 -n 10000 

  //100 个并发连接,10000 个请求,检测服务器性能B、redis-benchmark -h 

   B、192.168.42.111 -p 6379 -q -d 100

   //测试存取大小为 100 字节的数据包的性能

   C、redis-benchmark -h 192.168.42.111 -p 6379 -t set,get -n 100000 -q

   //只测试 set,lpush 操作的性能

   D 、 redis-benchmark -h 192.168.42.111 -p 6379 -n 100000 -q script load

   "redis.call('set','foo','bar')"

   //只测试某些数值存取的性能

7、管道PIPE

将多个指令打包后,一次性提交到 Redis, 网络通信只有一次

mysql -utest -ptest stress --default-character-set=utf8 --skip-column-names --raw < order.sql |

redis-cli -h 192.168.42.111 -p 6379 -a 12345678 --pipe

8、弱事务

multi 为开始,exec为结束,discard为终止事务

有些情况下不能回滚,例如类型错误时候。

watch让事务失效

9、发布、订阅

subscrible channel:test//订阅消息

publish channel:test "hello world"  //发布消息

pubsub numsub channel:test // 频道 channel:test 的订阅数

unsubscribe channel:test   //取消订阅

psubscribe ch* //订阅以 ch 开头的所有频道

punsubscribe ch* //取消以 ch 开头的所有频道

10、键的迁移:把部分数据迁移到另一台 redis 服务器

     1, move key db //reids 有 16 个库, 编号为 0-15

     2, dump key;restore key ttl value//实现不同 redis 实例的键迁移,ttl=0 代表没有过期时间

     3,migrate 用于在 Redis 实例间进行数据迁移,实际上 migrate 命令是将 dump、

restore、del 三个命令进行组合,从而简化了操作流程。

migrate 命令具有原子性,从 Redis 3.0.6 版本后已经支持迁移多个键的功能。

migrate 命令的数据传输直接在源 Redis 和目标 Redis 上完成,目标 Redis 完成

restore 后会发送 OK 给源 Redis。


比如:把111上的name键值迁移到112上的redis192.168.42.111:6379> migrate 192.168.42.112 6379 name 0 1000 copy

11、键的遍历

1,键全量遍历:

mset country china city bj name lilei //设置 3 个字符串键值对

keys * //返回所有的键, *匹配任意字符多个字符

keys *y //以结尾的键,

keys n*e //以 n 开头以 e 结尾,返回 name

keys n?me // ?问号代表只匹配一个字符 返回 name,全局匹配

keys n?m* //返回 name

keys [l,n]* //返回以 l n 开头的所有键

 keys [l]ilei 全量匹配 lilei

2,渐进式遍历

遍历匹配:匹配以 n 开头的键,最大是取 5 条,第一次 scan 0 开始

scan 0 match n* count 5

第二次从游标 4096 开始取 20 个以 n 开头的键,相当于一页一页的取当最后

返回 0 时,键被取完,但 count 不准,一般用来代替 keys *操作,可避免阻塞

12、高可用

  一、主从方式

1.)主从复制

a,方式一、新增 redis6380.conf, 加入 slaveof 192.168.42.111 6379, 在 6379 启动完

后再启 6380,完成配置;

b,方式二、redis-server --slaveof 192.168.42.111 6379

c,查看状态:info replication

d,断开主从复制:在 slave 节点,执行 6380:>slaveof no one

e,断开后再变成主从复制:6380:> slaveof 192.168.42.111 6379

f,数据较重要的节点,主从复制时使用密码验证: requirepass

e,从节点建议用只读模式 slave-read-only=yes, 若从节点修改数据,主从数据不一致

h,传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis 提供repl-disable-tcp-nodelay 参数决定是否关闭 TCP_NODELAY,默认为关闭参数关闭时:无论大小都会及时发布到从节点,占带宽,适用于主从网络好的场景,参数启用时:主节点合并所有数据成 TCP 包节省带宽,默认为 40 毫秒发一次,取决于内核,主从的同步延迟 40 毫秒,适用于网络环境复杂或带宽紧张,如跨机房

2)主从拓扑:支持单层或多层

二、  哨兵机制

A,原理:当主节点出现故障时,由 redis sentinel 自动完成故障发现和转移,并

通知应用方,实现高可用性。

主从复制与 redis sentinel 拓扑结构图


其实整个过程只需要一个哨兵节点来完成,首先使用 Raft 算法(感兴趣的同学可以查一下,其实就是个选举算法)实现选举机制,选出一个哨兵节点来完成转移和通知哨兵有三个定时监控任务完成对各节点的发现和监控:

任务 1,每个哨兵节点每 10 秒会向主节点和从节点发送 info 命令获取最拓扑结构图,哨兵配置时只要配置对主节点的监控即可,通过向主节点发送 info,获取从节点的信息,并当有新的从节点加入时可以马上感知到

任务 2,每个哨兵节点每隔 2 秒会向 redis 数据节点的指定频道上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其它哨兵节点的信息及对主节点的判断,其实就是通过消息 publish 和 subscribe 来完成的;

任务 3,每隔 1 秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次 ping 命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据

主观下线:刚我知道知道哨兵节点每隔 1 秒对主节点和从节点、其它哨兵节点发送 ping 做心跳检测,当这些心跳检测时间超过 down-after-milliseconds 时,哨兵节点则认为该节点错误或下线,这叫主观下线;这可能会存在错误的判断。

客观下线:当主观下线的节点是主节点时,此时该哨兵 3 节点会通过指令 sentinel is-masterdown-by-addr 寻求其它哨兵节点对主节点的判断,当超过 quorum(法定人数)个数,此时哨兵节点则认为该主节点确实有问题,这样就客观下线了,大部分哨兵节点都同意下线操作,也就说是客观下线。

  三、集群

RedisCluster 是 redis 的分布式解决方案,在 3.0 版本后推出的方案,有效地解决了Redis 分布式的需求,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题。

节点之间采用 Gossip 协议进行通信,Gossip 协议就是指节点彼此之间不断通信交换信息

meet 消息:用于通知新节点加入,消息发送者通知接收者加入到当前集群,meet 消息通信完后,接收节点会加入到集群中,并进行周期性 ping pong 交换                                                   ping 消息:集群内交换最频繁的消息,集群内每个节点每秒向其它节点发 ping 消 息,用于检测节点是在在线和状态信息,ping 消息发送封装自身节点和其他节点的状态 数据;                    pong 消息,当接收到 ping meet 消息时,作为响应消息返回给发送方,用来确认正 常通信,pong 消息也封闭了自身状态数据;                                                                                                  fail 消息:当节点判定集群内的另一节点下线时,会向集群内广播一个 fail 消息, 后面会讲到。……

虚拟槽分区了解下  

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