1、redis概述

redis的出现时间并不长,是NoSQL中的一种,基于键-值型的存储,与memcache类似,但是memcache中只是内存的缓存,而redis不仅是内存中的缓存,还提供持久存储,在2009年第一次发布redis。

Redis 全称(REmote DIctionary Server)远程字典服务器,而这个字典服务器从本质上来讲,主要是提供数据结构的远程存储功能的,可以理解为redis是一个高级的K-V存储,和数据结构存储,因为redis除了能够存储K-V这种简单的数据之外,还能够存储,列表、字典、hash表、等对应的数据结构。

2、Redis与Memcache对比

1.是一个分布式的内存对象缓存系统,而redis是可以实现持久存储。

2.Memcache是一个LRU的缓存,redis支持更多的数据类型。

3.Memcache是多线程的,redis是单线程的。

4.二者性能几乎不相上下,实际上redis会受到硬盘持久化的影响,但是性能仍然保持在与Memcache不相上下,是非常了不起的。

3、redis与memcache的不同之处

在性能上redis不比memcache差,因为redis整个运行通通都是在内存中实现的,它的所有的数据集都是保存在内存中的,内存中的数据会周期性的写入到磁盘上,以实现数据的持久功能,而这种写磁盘并不是用于访问,而仅是冗余功能,所以redis所有功能都在内存中完成,因为此性能也是可想而知。

redis与mamcache不同之处在于redis有一个周期性的将数据保存到磁盘上的机制,而且不只一种,有两种机制,这也是redis持久化的一种实现,另外与mamcache有所区别的是,redis是单线程服务器,只有一个线程来响应所有的请求。

4、redis主从模式

redis支持主从模式,但是redis的主从模式默认就有一个sentinel工具,从而实现主从架构的高可用,也就是说,redis能够借助于sentinel工具来监控主从节点,当主节点发生故障时,会自己提升另外一个从节点成为新的主节点。

在redis 3.0版本发布,开始支持redis集群,从而可以实现分布式,可以将用户的请求分散至多个不同节点。

5、redis所支持的数据类型

支持存储的数据类型有:String(字符串,包含整数), List(列表), Hash(关联数组), Sets(集合), Sorted Sets(有序集合), Bitmaps(位图), HyperLoglog

6、redis性能评估

1.100万较小的键存储字符串,大概消耗100M内存。

2.由于redis是单线程,如果服务器主机上有多个CPU,只有一个能够使用,但并不意味着CPU会成为瓶颈,因为redis是一个比较简单的K-V数据存储,CPU通常不会成为瓶颈的。

3.在常见的linux服务器上,500K(50万)的并发,只需要一秒钟处理,如果主机硬件较好的情况下,每秒钟可以达到上百万的并发。

7.1Redis的优势

1.丰富的(资料形态)操作:String(字符串,包含整数), List(列表), Hash(关联数组), Sets(集合), Sorted Sets(有序集合), Bitmaps(位图), HyperLoglog。

2.内建Replication和culster(自身支持复制及集群功能)。

3.支持就地更新(in-place update)操作,直接可以在内存中完成更新操作。

4.支持持久化(磁盘)避免雪崩效应,万一出现雪崩效应,所有的数据都无法恢复,但redis由于有持久性的数据,可以实现恢复。

7.2Memcached的优势

1.多线程

2.善用多核CPU

3.更少的阻塞操作

4.更少的内存开销

5.更少的内存分配压力

6.可能有更少的内存碎片

8、redis主从搭建

主redis:172.17.0.53

从redis:172.17.0.54

8.1编译安装

 [root@docker-02 ~]# wget http://download.redis.io/releases/redis-4.0.10.tar.gz[root@docker-02 ~]# tar xzf redis-4.0.10.tar.gz[root@docker-02 ~]# cd redis-4.0.10/src[root@docker-02 src]# make PREFIX=/usr/local/redis install

8.2创建目录

 [root@docker-02 src]# mkdir -p /usr/local/redis/conf [root@docker-02 src]# mkdir -p /usr/local/redis/data[root@docker-02 src]# mkdir -p /usr/local/redis/logs

redis/

├── bin  redis二进制文件路径

├── conf 存放配置

├── data 存放数据

└── logs  存放日志/pid文件

8.3创建redis用户

 [root@docker-02 src]# useradd -s /sbin/nologin redis[root@docker-02 src]# chown -R redis.redis /usr/local/redis/

8.4配置standalone单机模式

 ##配置文件没有,自己创建配置文件[root@docker-02 src]# vim /usr/local/redis/conf/redis_6301.conf##6301#################################### NETWORK #####################################bind 0.0.0.0protected-mode yes ##daemonize no Linux Shell终端运行redis,改为yes即后台运行Redis服务port 6301tcp-backlog 511 ## 在高并发的环境中,为避免慢客户端的连接问题,需要设置一个高速后台日志timeout 0 ## bind 0.0.0.0#设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接tcp-keepalive 300 ## 在Linux 上,指定值(秒)用于发送 ACKs 的时间。注意关闭连接需要双倍的时间。默认为 0 ################################# GENERAL #####################################daemonize yes ##redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。supervised no  ##可以通过upstart和systemd管理Redis守护进程pidfile /usr/local/redis/logs/6301.pid  ## 当运行多个 redis 服务时,需要指定不同的pid文件和端口loglevel notice  ##设置服务端的日志级别logfile /usr/local/redis/logs/6301.logdatabases 16 ##数据库的总数,默认16个always-show-logo yes ##是否总是显示logo################################ SNAPSHOTTING ################################save 9001save 30010save 6010000stop-writes-on-bgsave-error yes ## 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作rdbcompression yes ## 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串rdbchecksum yes ## 是否校验rdb文件dbfilename dump6301.rdb  ## 设置 dump 的文件位置dir /usr/local/redis/data/  ## 工作目录################################# REPLICATION ################################## slaveof <masterip> <masterport># masterauth <master-password>slave-serve-stale-data yes ## 当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现如果为 yes,slave 仍然会应答客户端请求,但返回的数据可能是过时,如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress"的错误slave-read-only yes ## slave 实体是否接受写入操作,从 redis 2.6 版起,默认 slaves 都是只读的repl-diskless-sync no  ##硬盘备份repl-diskless-sync-delay 5repl-disable-tcp-nodelay no  slave-priority 100 ##如果 master 不能再正常工作,那么会在多个 slave 中,选择优先值最小的一个 slave 提升为 master 优先值为 0表示不能提升为 master################################## SECURITY ###################################requirepass rds6301_paswd  ## 设置认证密码################################### CLIENTS ####################################maxclients 10000 ## 最大限制############################## MEMORY MANAGEMENT ################################maxmemory 8gb  ## 最大使用内存maxmemory-policy volatile-lru  ##内存不足"时,数据清除策略,默认为"volatile-lru"############################# LAZY FREEING ####################################lazyfree-lazy-eviction no  ##内存满逐出选项lazyfree-lazy-expire nolazyfree-lazy-server-del noslave-lazy-flush no  ##全量同步时,slave异步清空所有DB############################## APPEND ONLY MODE ###############################appendonly yes ##以追加的方式记录所有写操作appendfilename "appendonly6301.aof" ##配置设置appendfsync everysec  ##异步操作,每秒记录 如果有一秒内宕机,有数据丢失no-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100 ##当aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。auto-aof-rewrite-min-size 64mb  ##触发aof rewrite的最小文件尺寸aof-load-truncated yesaof-use-rdb-preamble no  ##配置项可以打开混合开关################################ LUA SCRIPTING ###############################lua-time-limit 5000 ##最大执行时间的长短################################ REDIS CLUSTER ######################################################### CLUSTER DOCKER/NAT support ########################################################## SLOW LOG ###################################slowlog-log-slower-than 10000 ## 可以通过两个参数设置 slow log :一个是告诉 Redis 执行超过多少时间被记录的参数 slowlog-log-slower-than( 微秒 ) 另一个是 slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除上面的时间以微秒为单位,因此 1000000代表一秒。注意指定一个负数将关闭慢日志,而设置为 0将强制每个命令都会记录slowlog-max-len 128 ##对日志长度没有限制,只是要注意它会消耗内存可以通过 SLOWLOG RESET 回收被慢日志消耗的内存推荐使用默认值 128,当慢日志超过 128时,最先进入队列的记录会被踢出################################ LATENCY MONITOR ##############################latency-monitor-threshold 0 ##默认情况下延时监控############################# EVENT NOTIFICATION ##############################notify-keyspace-events "" ##开启或关闭键空间通知功能############################### ADVANCED CONFIG ###############################hash-max-ziplist-entries 512 ##filed最多512个hash-max-ziplist-value 64 ##value最大64字节list-max-ziplist-size -2 ##取正值时表示quicklist节点ziplist包含的数据项list-compress-depth 0 ##0: 是个特殊值,表示都不压缩set-max-intset-entries 512 ##如 type 是 REDIS_SET 类型的,如果其值可以表示成数字类型且 entry 小于配置值set-max-intset-entries, 则可以编码成 REDIS_ENCODING_INTSET 类型存储,以节约内存; 否则采用 Dict类型来存储zset-max-ziplist-entries 128 ##相同的hash列表中,排序列表的元素和长度都不能高于如下值zset-max-ziplist-value 64hll-sparse-max-bytes 3000activerehashing yes ##重建hash表的时候如果内存不足 如果此值设置为no则延时,如果为yes则尽快释放内存client-output-buffer-limit normal 000 ##客户端buffer限制,如果达到硬限制则立刻断开client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10 ##一个任务可以使用的cpu数目aof-rewrite-incremental-fsync yes ##当一个子进程要改写AOF文件,如果以下选项启用,那文件将会在每产生32MB数据时进行同步,这样提交增量文件到磁盘时可以避免出现比较大的延迟########################### ACTIVE DEFRAGMENTATION #######################

8.5配置slave从模式

主从配置文件一样,从库只需要加几个配置即可

 ########################### ACTIVE DEFRAGMENTATION ######################################################## REPLICATION #################################slaveof 172.17.0.53 6306#主服务器redis的ip和端口masterauth rds6301_paswdslave-read-only yes

8.6启动redis实例

 [root@docker-02 redis]# /usr/bin/sudo -H -u redis -g redis /bin/bash -c "/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6301.conf"[root@docker-02 redis]# ps -ef|grep 6301redis    32013    1 016:00 ?        00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6301root     3201831963 016:00 pts/0    00:00:00 grep--color=auto 6301

一般redis都是单机多实例部署,只需要替换配置文件中的端口相关的配置即可,

appendonly 和 SNAPSHOTTING  可以都开启或只开启一个即可根据实际需求决定 。

8.7查看状态

 [root@docker-02 bin]# /usr/local/redis/bin/redis-cli -p 6301 -a rds6301_paswd info##可以看到从的状态信息# Replicationrole:slavemaster_host:172.17.0.53master_port:6306master_link_status:upmaster_last_io_seconds_ago:3master_sync_in_progress:0slave_repl_offset:718410slave_priority:100slave_read_only:1connected_slaves:0master_replid:d40bce93544a3a66c6afc01081fe851a4ccf278dmaster_replid2:0000000000000000000000000000000000000000master_repl_offset:718410second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:718410

9、redis基本操作

 ##登录到redis[root@docker-02 ~]# /usr/local/redis/bin/redis-cli -p 6301 -a rds6301_paswd##获取使用帮助127.0.0.1:6301> help  ##redis的help命令非常强大,因为redis支持众多的数据结构,每一种数据结构当中都支持N种操作,因此需要使用 help @group方式来1.获取某一种数据结构所支持的操作2.获取字符串组所支持有那些操作127.0.0.1:6301> help @string##获取单个命令的使用方法127.0.0.1:6301> help APPENDAPPEND key value  ##命令方法summary: Append a value to a keysince: 2.0.0  ##说明此命令在哪个版本中引入的group: string  ##该命令所属哪一个组##查看都有哪些组127.0.0.1:6301> help TAB键,每敲一次轮换一个,带有@则为一个组,不带@则为命令使用##切换库(名称空间)127.0.0.1:6301> select 1 ##表示切换到1号库中,默认为0号库,共16个,0-15

10、键的遵循

1.可以使用ASCII字符

2.键的长度不要过长,键的长度越长则消耗的空间越多

3在同一个库中(名称空间),键的名称不得重复,如果复制键的名称,实际上是修改键中的值

4.在不同的库中(名称空间),键的同一个名称可以重复

5.键可以实现自动过期

11、Strings的操作

 127.0.0.1:6301[1]> help setSET key value [EX seconds] [PX milliseconds] [NX|XX]  ##命令 键 值 [EX 过期时间,单位秒]summary: Set the string value of a keysince: 1.0.0group: string##NX:如果一个键不存在,才创建并设定值,否则不允许设定##XX:如果一个键存在则设置键的值,如果不存在则不创建并不设置其值127.0.0.1:6301[1]> setywm lzllOK127.0.0.1:6301[1]> setywm aaa NX  ##反回提示一个没能执行的操作(nil)127.0.0.1:6301[1]> getywm"lzll"127.0.0.1:6301[1]> setywm abc XXOK##定义一个键并设置过期时间为60秒127.0.0.1:6301[1]> setywm bcd EX 60OK

12、获取键中的值

 127.0.0.1:6301[1]> help getGET keysummary: Get the value of a keysince: 1.0.0group: string127.0.0.1:6301[1]> setmxp lzllOK127.0.0.1:6301[1]> getmxp"lzll"##添加键中的值(在原有键中附加值的内容)127.0.0.1:6301[1]> append mxp fda(integer) 7127.0.0.1:6301[1]> getmxp"lzllfda"##获取指定键中的值的字符串的长度127.0.0.1:6301[1]> strlen mxp(integer) 7

13、定义整数值

 127.0.0.1:6301[1]> setywm 0 ##整数值为0OK##增加键中的整数值127.0.0.1:6301[1]> incr ywm(integer) 1127.0.0.1:6301[1]> incr ywm(integer) 2127.0.0.1:6301[1]> incr ywm(integer) 3127.0.0.1:6301[1]> incr ywm(integer) 4127.0.0.1:6301[1]> getywm"4"注:incr命令只能对整数使用

14、删除键

 127.0.0.1:6301[1]> del ywm(integer) 1127.0.0.1:6301[1]> getywm(nil)

15、列表的操作

键指向一个列表,而列表可以理解为是一个字符串的容器,列表是有众多元素组成的集合,可以在键所指向的列表中附加一个值

1.LPUSH 在键所指向的列表前面插入一个值(左边加入)

2.RPUSH 在键所指向的列表后面附加一个值(右边加入)

3.LPOP 在键所指向的列表前面弹出一个值(左边弹出)

4.RPOP 在键所指向的列表后面弹出一个值(右边弹出)

5LINDEX 根据索引获取值,指明索引位置进行获取对应的值

6.LSET 用于修改指定索引的值为指定的值

 ##指定一个新的列表,在帮助中并没说明哪个命令用于创建一个新的列表,实际上创建一个新的列表使用LPUSH或RPUSH都可以127.0.0.1:6301[1]> help @list  127.0.0.1:6301[1]> lpush ll cjk  ##ll为列表名称,cjk为值(索引)(integer) 1##获取列表中的值:需要指明索引位置进行获取对应的值127.0.0.1:6301[1]> lindex ll 0 ##第一个索引则为0"cjk"##在原有的列表中的左侧加入一个值127.0.0.1:6301[1]> lpush ll 0(integer) 3127.0.0.1:6301[1]> lpush ll 1(integer) 4127.0.0.1:6301[1]> lindex ll 0"1"127.0.0.1:6301[1]> lindex ll 1"0"##在原有的列表中的右侧加入一个值127.0.0.1:6301[1]> rpush ll lzll(integer) 7127.0.0.1:6301[1]> lindex ll 6"lzll"##修改一个已有的列表中的值127.0.0.1:6301[1]> lset ll 6abcOK127.0.0.1:6301[1]> lindex ll 6"abc"##查看列表中的值的数量127.0.0.1:6301[1]> llen ll(integer) 7##在已有的列表中右侧弹出(删除)一个值127.0.0.1:6301[1]> rpop ll"abc"##在已有的列表中左侧弹出(删除)一个值127.0.0.1:6301[1]> lpop ll"1"127.0.0.1:6301[1]> lpop ll"0"127.0.0.1:6301[1]> lpop ll"fda"

16、清空数据库

 ##FLUSHDB:删除当前选择的数据库所有key##FLUSHALL:清空所有库127.0.0.1:6301[1]> flushdbOK

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源。知识星球主要针对于在这方便工作、对运维特别感兴趣、想往运维方面发展的小伙伴。大家可以加入星球,一起探讨工作中的疑惑、技术上的难题、以及未来的发展趋势。

为了保证星球的质量,知识星球每周会发表两篇文章(周三和周末)。

知识星球会不定期的为大家提供更优惠或者免费运维峰会门票的福利。

redis主从架构(上)相关推荐

  1. 【带你重拾Redis】Redis 主从架构

    Redis 主从架构 单机的 Redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  2. Redis面试 - Redis 主从架构

    Redis 主从架构 单机的 redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  3. Linux学习-redis主从架构

    redis主从架构 #三个节点,一主,二从(由于资源有限,在一台机器上实现),主节点写,从节点读 #1:创建目录 [root@redis opt]# mkdir {7001..7003} [root@ ...

  4. Redis 主从架构数据同步

    Redis 主从架构图 主从架构能够很大提升并发能力,master 节点负责写数据,slave 节点负责读数据,这样就涉及到 master 和 slave 数据同步的一个过程 一起来看一下数据是如何同 ...

  5. Redis主从架构:主从同步和哨兵机制

    Redis主从架构:主从同步和哨兵机制 一. Redis主从架构 二. 主从同步 2.1 引入 2.2 原理 (1) 全量同步 (2) 增量同步 (3) 优化Redis主从集群 2.3 总结 三. 哨 ...

  6. 【Redis】Redis主从架构和哨兵模式

    文章目录 主从架构 为什么需要Redis主从架构? 搭建主从架构(一主二从) 主从一致原理 复制积压缓冲区 全量复制 增量复制 在主从架构中出现了宕机的情况 为什么主从库之间的复制不使用 AOF? 哨 ...

  7. Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式

    redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...

  8. Redis主从架构 | 黑马Redis高级篇

    目录 一.搭建主从架构 1.为什么要搭建 2.准备实例和配置 3.启动 4.开启主从关系 二. 数据同步原理 1.全量同步 2.命令传播 3.增量同步 三.常见面试题 一.搭建主从架构 1.为什么要搭 ...

  9. 那一天,被Redis主从架构支配的恐惧

    面试官:要不你来讲讲你最近在看的点呗?可以拉出来一起讨论下(今天我也不知道要问什么) 候选者:最近在看「Redis」相关的内容 面试官:嗯,我记得已经问过Redis的基础和持久化了 面试官:要不你来讲 ...

最新文章

  1. R语言rpartb包树回归模型构建:基于前列腺prostate数据集
  2. vim 撤销上一步操作_Linux笔记(4):vim入门
  3. 高性能服务器架构(二):缓存清理策略
  4. war部署到tomcat
  5. 【渝粤题库】陕西师范大学210011幼儿园语言教育作业(高起专)
  6. Maven + Nexus + SVN + Eclipse 配置步骤说明
  7. hhvm php5.6,PHP_5.5_/_PHP5.6_/_PHP-NG_和_HHVM_哪个性能更好?
  8. 返回一个不确定的对象_我有一个Android必备知识点,你确定不了解一下?
  9. 使用Zabbix监控Windows主机
  10. 桶排序,冒泡排序,快速排序三者比较(例子说名)
  11. Linux系统如何安装PDF编辑器,在Ubuntu中编辑PDF文件的5种方法
  12. 【设计图交接与沟通的高效平台】上海道宁为设计师与开发者提供产品团队的互联空间——Zeplin
  13. PhalApi+Gearman,接口MQ异步队列任务的完整开发教程
  14. 《自控力》第六章读书笔记
  15. 关于UpdateData函数
  16. Windows RDS远程会话服务
  17. 关于linux android sdk配置环境
  18. 蓝牙耳机充电仓单芯片IC解决方案汇总
  19. ppt做出平滑的效果
  20. 大漠易语言 找字、找图

热门文章

  1. 计算机科学期刊和山西大学学报比较,山西大学学报是核心期刊吗_山西大学是211吗_山西大学...
  2. 提升物业服务品质,提高业主满意度:物业客户服务管理解决方案设计
  3. 计算机提示pdf不能加载,Win7打开PDF文件提示无法自定义打开程序的解法
  4. Android基础——JSON数据的全方位解析
  5. 四种最令人讨厌的编程语言
  6. 【一些话】陈怡然教授:年底了,和学生说两句心里的鸡汤
  7. python学习练习
  8. 【STM32H750】从零编写MDK的FLM烧录算法
  9. 抖音xgorgon和设备注册算法
  10. mmse评估量表_简易精神状态评价量表(MMSE量表)