一 redis 数据格式
  • 短连接 长连接pconnect
  • tcp协议
  • 交互数据格式
交互采用特殊的格式 \r\n
1."+"号开头表示单行字符串的回复 
    set aa aa  返回的格式就是 +OK\r\n
2."-"号开头表示错误的信息回复。
   ss ss 返回的格式就是-ERR unknown command 'ss'\r\n
3.":"号开头表示一个整数回复。 如":0\r\n"
    del aa返回的格式就是 存在 :1\r\n 不存在 :0\r\n 
4."$"号开头表示一个批量的回复。
 如GET mykey get aa  *2\r\n$3\r\nget\r\n$2aa\r\n
    返回$2aa\r\n
5."*"号开头表示多个批量回复。
 如GET mykey get aa  *2\r\n$3\r\nget\r\n$2aa\r\n
 
  • pipe 模型

*3\r\n起始命令表示有3个参数

$3\r\n表示下一个命令参数长度为3

set\r\n参数命令

$2\r\n表示下一个命令参数长度为2

aa\r\n

$4\r\n表示下一个命令参数长度为4

bbbb\r\n

利用这种格式我们可以将数据库中的直接插入redis中

  

##商品活动
select CONCAT('*4\r\n$4\r\nhset\r\n$',LENGTH(concat('p_white_',item_id)),'\r\np_white_',item_id,'\r\n$',LENGTH(promotion_id),'\r\n',promotion_id,'\r\n' , '$' , LENGTH(promotion_id) , '\r\n' , promotion_id , '\r') from (
SELECT i.sku as item_id , i.promotion_id as promotion_id
from mia_test2.promotion as p,mia_test2.promotion_items as i where p.end_time>=now() and p.status=3 and p.id = i.promotion_id and i.status=0
)as t; mysql -uxxx -pxxx -hxxx --default-character-set=utf8 --skip-column-names --raw < aa.sql| redis-cli -h 172.16.104.236 -p 6379 --pipe
#300w数据 半分钟导入

 

二 redis 执行流程

   

    processInputBuffer 解析协议->processInlineBuffer  processMultibulkBuffer协议
    addReply 是一个list  他会返回结果不断的追加到链表(缓冲区)中,最后输出一起刷新给客户端
三 redis 主从
     
  • Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT
  • Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(2.8+Redis已经不需要让Slave阻塞,此时client 读取的是历史数据)。
  • Master端收到sync命令简单判断是否有正在进行的内存快照子进程,没有则立即开始内存快照,有则等待其结束,当快照完成后会将该文件发送给Slave端。
  • Slave端接收Master发来的内存快照文件,保存到本地,待接收完成后,清空内存表,重新读取Master发来的内存快照文件,重建整个内存表数据结构,并最终状态置位为 REDIS_REPL_CONNECTED状态,Slave状态机流转完成。(重建整个内存数据结构的时候,slave是阻塞状态,client连接redis 将产生错误
  • Master端在发送快照文件过程中,接收的任何会改变数据集的命令都会暂时先保存在Slave网络连接的发送缓存队列里(list数据结构),待快照完成后,依次发给Slave,之后收到的命令相同处理,并将状态置位为 REDIS_REPL_ONLINE
  • 在2.8之后replication 支持增量复制,Master会在其内存中创建一个复制流的等待队列(list数据结构),Master和它所有的slave都维护了复制的replication offset 和 a master run id,因此,当网络连 接断开后,Slave会请求Master继续进行未完成的复制,从所记录的replication offset 开始。如果run id变化了,或者replication offset 不可用,那么将会进行一次全部 数据的复制.(当Master变更,Slave端会进行一次全量同步,主备从方案)
  • 每增加一台从库,Master端都会重新执行一遍主从复制,建议从库最好一次性增加好,或者不要在服务器繁忙的时候增加从库
  • 不建议redis的内存设置超过32G,redis replication 时 bgsave 会消耗大量的内存,传输快照文件时会消耗大量带宽,  load快照会锁死从库.
  • bgsave 很消耗内存 请预留redis已使用量 一半的内存用于 bgsave子进程消耗。
 
 
 

redis 梳理笔记(一)的更多相关文章

  1. redis 梳理笔记(二)

    一.redis 分布式 redis+keepalived (虚ip漂移) redis 100秒平均写入并发  3.6w (写入与keepalived监控程序无关) .redis 数据库内存已占有80% ...

  2. redis学习笔记(详细)——高级篇

    redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...

  3. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  4. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  5. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  6. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  7. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  8. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

  9. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

随机推荐

  1. jdk8 JAVA_OPTS

    JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -Djava. ...

  2. Fastify 系列教程一(路由和日志)

    介绍 Fastify是一个高度专注于以最少开销和强大的插件架构,为开发人员提供最佳体验的Web框架. 它受到了 Hapi 和 Express 的启发,是目前最快的 Node 框架之一. Fastify ...

  3. Tomcat 笔记-配置域名

    编辑/etc/hosts文件,添加域名: 127.0.0.1 localhost 127.0.1.1 ubuntu # The following lines are desirable for IP ...

  4. mybatis 的mapper配置文件sql语句中, 有时用到 大于, 小于等等

    一, 用<![CDATA[   ]]>标识,例如: <if test="create_timeStart != null and create_timeStart != ' ...

  5. 『实践』Yalmip建模+Cplex类求解

    Yalmip建模+Cplex类求解 一.缘由 Yalmip只能设置部分Cplex的参数,所以需要调用Cplex类.而且optimize是Yalmip提供的常用函数,但此函数的返回结果参数有限. 图1 ...

  6. 阿里巴巴Java开发手册思维导图

    趁着有时间把阿里巴巴Java开发手册又看了一遍了,很多时候觉得看完之后,发现自己好像一点都不记得了里面的内容了.只能把大概内容画一遍在脑子里形成一张图方便记忆,这样就更能够记得自己的看完的内容了.其中 ...

  7. 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ #精选JAVASCRIPT前端开发

    想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ 作为一个软(ku)件(bi)工(de)程(ma)师(nong),你有没有觉得做什么事都没时间?没时间学习新东西,没时间去回顾.整理原来写的烂代 ...

  8. Leetcode题解(五)

    17.Letter Combinations of a Phone Number 题目 针对输入的数字串,每一个数字都对应对个字符可以选择.因此可以直接采用递归的思想,依次遍历数字串的每一个数字,处理 ...

  9. Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”

    今天老板让我验证一下技术可行性,记录下来. 需求 :定位手机的位置并在百度地图上显示,得到位置后使用前置摄像头进行抓拍 拿到这个需求后,对于摄像头的使用不太熟悉,于是我先做了定位手机并在百度地图上显示 ...

  10. Windows系统下python3中安装pyMysql

    python2和python3是不兼容的,在py2中,链接数据库使用的是mysqldb,但在py3中是不能用的. 解决办法就是在py3中数据库使用的模块是pyMysql. 在dos窗口中安装第三方库会 ...