Redis基础知识与集群搭建课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Redis基础知识与集群搭建课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Redis 基础知识 集群 搭建 课件
- 资源描述:
-
1、Redis根底知识与集群搭建根底知识与集群搭建目录RedisRedis根底知识根底知识Redis集群搭建12Redis,典型的NoSQL数据库效劳器,采用KEY-VALUE存储构造,可以作为效劳程序独立运行于自己的效劳器主机,同时作为内存数据库,不用IO读取硬盘数据,能够快速响应请求。RedisRedis是什么?是什么?RedisRedis有什么特点?有什么特点?支持持久化、支持多种数据构造、支持主从复制、免费与关系型数据库比较与关系型数据库比较redis由于其存储构造相对简单,因此并不能对复杂的逻辑关系提供很好的支持,然而在适用于Redis的场景中,我们却可以由此而获得效率上的显著提升。作为
2、NOSQL数据库之一的redis,除了支持根本key-value方式,还支持构造化存储,以适应各类应用场景:nString:String:字符串类型nList:List:链表类型nHashes:Hashes:哈希类型nSet:Set:集合类型nSorted-SetsSorted-Sets有序集合类型String是最常用的一种数据类型,普通的key/value 存储都可以归为此类。当然,也可以存储图片,视频等序列化对象,Value最多可以容纳的数据长度是512M。1.赋值:SET KEY VALUE MSET KEY1 VALUE1 KEY VALUE2SETBIT KEY OFFSET 1/0
3、2.取值:GET KEY MGET KEY1 KEYGETBIT KEY OFFSET3.字符串操作:STRLEN KEYSETRANGE KEY OFFSET VALUESGETRANGE KEY START END4.数字操作:INCR KEY DECR KEYINCRBY KEY decrement/DECRBY KEY decrement 5.其他:SETEX KEY SECONDS KEY VALUEStringLENBUFFREEList类型是按照插入顺序排序的字符串链表。和数据构造中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并
4、不存在,Redis将为该键创立一个新的链表。1.赋值:LPUSH/RPUSH KEY V1 V2 VNLPUSHX/RPUSHX KEY VALUE2.取值:LPOP/RPOP KEYLRANGE KEY START ENDGETBIT KEY OFFSET操作:LSET key index valueLINDEX KEY index4.取长度:LLEN KEY5.截取:LTRIM key start stop场景:LIST可以作为消息队列,LPUSH链表头作为生产者插入消息,RPOP作为消费者取得消息。我们可以将Redis中的Hashes类型看成具有String Key和String Val
5、ue的map容器。所以该类型非常适合于存储值对象的信息。1.赋值:HSET KEY FILED VALUE HMSET KEY FILED VALUE FILED1 VALUE2.取值:HGET KEYHMGET KEY KEYHKEYS KEYHVALS KEYHGETALL KEY3.删除:HDEL FILED FILED4.取长度:HLEN5.存在判定:HEXISTS key filed场景:AIOP中用户标签信息使用HASHMAP存储,存储构造为user:phone tag1 val1 tag2 val2,AIOP传递客户手机号,即可通过HGET user:phone tag1 tag
6、2 取出标签值。在Redis中,我们可以将Set类型看作为没有排序的字符集合,就像什锦果冻,只是聚集在一起,没有顺序,这和List类型不一样,另外要注意Set集合中不允许出现重复的元素,而且Set支持多个Sets之间的差、并、交集操作。1.新增:SADD KEY M1 M22.查询:SMEMEBERS KEYSPOP KEYSRANDMEMBER KEY3.删除:SREM KEY M1 M2MN4.取长:SCARD KEY5.存在判定:SISMEMBER KEY MEMBER6.聚合运算:SDIFF KEY1 KEY2 SINTER KEY1 KEY2 SUINON KEY1 KEY2场景:C
7、OC中将符合标签的用户进展聚类,存放到Set中,比方set1 存放学生标签用户、set2存放低消费用户、set3存放非合约用户,那么取出可能购置小米的低消非合约学生用户群:1.SINTERSTORE aset set1 set2 2.SDIFF aset set3 有序集合中也不允许有重复数据,它比Set多了一个score,Redis正是通过score来为集合中的成员进展从小到大的排序。需要注意的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。1.查询:ZADD KEY SCOREN MBR1 SCOREN MBRN2.删除:ZREM KEY MBR1
8、 MBR2 MBRN3.取前几位/后几位:ZRANGE key start stop WITHSCORESZREVRANGE key start stop WITHSCORES4.统计数量:ZCOUNT key min max5.取分数:ZSCORE key member场景:可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命令更新玩家的分数,此后再通过ZRANGE命令获取积分TOP TEN的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信
9、息。以上各类数据类型的操作全部是针对于KEY关联的value操作,redis也提供了单独对key值的操作匹配:KEYS pattern 例如 keys*列出所有key值删除:DEL key key.例如 del list1 删除链表1是否存在:EXISTS key键值迁移:MOVE key db-移向数据库 select 0 1可选择数据库查看数据类型:TYPE key 设置超时:EXPIRE key seconds/EXPIREAT key timestamp 取消超时:PERSIST keyRedis在设计之初就被定义为长时间不连续运行的效劳进程,因此大多数系统配置参数都可以在不重新启动进
10、程的情况下立即生效,我用到的有:Slaveof host port 修改主从关系Info 当前系统信息 shutdown 关闭redisflushall 清空所有keys flushdb 清空当前数据库key Redis主从复制的优势:2.支持级联复制:master-slave-slave,分载master同步压力3.支持非阻塞式数据同步:数据同步与对外效劳能力别离,互不影响4.支持slave只读模式主主从从复复制制流流程程1).RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。优点:1.只有一份rdb文件,可随时备份 2.比AOF文件小,加载效率高 3.只提供fork子
11、进程,不阻塞主进程,IO操作比较少2).AOF持久化:该机制将以日志的形式记录效劳器所处理的每一个写操作,在Redis效劳器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。2.APPEND方式追加日志,不会对旧日志文件产生影响3).无持久化:我们可以通过配置的方式禁用Redis效劳器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了。4).同时应用AOF和RDB。1).RDB持久化:Dump快照的机制:1).Redis先fork子进程。2).子进程将快照数据写入到临时RDB文件中。3).当子进程完成数据写入操作后,再用临时文件替换老的文件
12、。redis.conf配置修改:save 900 1#在900秒后,如果至少有1个key发生变化,那么dump内存快照。save 300 10#在300秒后,如果至少有10个key发生变化,那么dump内存快照。save 60 10000#在60秒之后,如果至少有10000个key发生变化,那么dump内存快照。注释1:可以配置多个条件组成持久化策略 注释2:fork进程开销大,数据量太大时,消耗cpu和内存资源,影响父进程不能及时响应请2).AOF持久化:redis.conf配置修改 appendonly yes appendfsync always#每次有数据修改发生时都会写入AOF文件。
13、appendfsync everysec#每秒钟同步一次,该策略为AOF的缺省策略。appendfsync no#从不同步。高效但是数据不会被持久化。注释:一般选择always 每修改同步,保证数据平安Redis作为内存数据库,所有数据都从内存中拿,省去读写磁盘的消耗持久化是由fork子进程处理,主效劳对外能力不受影响,响应速度极快。但我们不可能将所有的数据都读到内存中,所以内存资源显得非常可贵,我们就要优化存储构造,使得好钢用在刀刃上.COC中每个客户会对应上千个标签,每个客户就是一个对象,我们如何存储它?phone序列化对象:tag1tag2tag3tagnkeyvaluePhone:ta
14、g1keyvaluephonekeyvaluev1Phone:tag2v2Phone:tagnvntag1v1tag2v2tagnvn序列化对象:要求在序列化对象:要求在redisredis存储前对象进展序列化操作,存储前对象进展序列化操作,每次取出后还要执行反序列化操作,开销太大;如果只想每次取出后还要执行反序列化操作,开销太大;如果只想取对象的某一个值,都需要将整个对象取出,还要解决并取对象的某一个值,都需要将整个对象取出,还要解决并发、数据一致性、加锁等复杂问题。发、数据一致性、加锁等复杂问题。K-VK-V模式模式:phone:phone字段冗余字段冗余HASHMAP:phoneHASH
15、MAP:phone字段只出现一次,防止数据冗余字段只出现一次,防止数据冗余存储存储构造构造比较比较比较K-V构造与HASHMAP构造对内存的影响:前提假设COC有1千万用户对象,每个用户对象有1000个标签,Redis存储的phone_no格式为185XXXXXXXX。1.根据ASCII编码,每位数字占用单字节字符,每个phone_no占用11Byte.2.K-V构造中,存放一个完成对象,每个phone_no需要重复1000次,所以存放1千万个对象phone_no为1000*1千万,所占空间为:内存内存优化优化效果效果2.根据业务场景,考虑使用BITMAP 前面我们在讲String的时候提到过
16、两个命令:setbit key offset 0/1 和 getbit key offset,这两个命令是在位上进展0/1赋值和取值。假设还是1000W用户,每个用户有1000个0/1标签,我们可以使用bitmap来存放这些数据:10010110000010phone1tag1tag1000Setbit phone1 1 1Setbit phone1 999 1所有标签总占用的内存为:0.000119MB*1000W=1.19GB,如果使用key-value构造包括hashes,内存占用至少是它的8倍。只适合只适合0101型标签型标签需要位移位与标签的字典表,属于额外开销,但相对而言需要位移位
17、与标签的字典表,属于额外开销,但相对而言字典表字典表offsetoffset数字可共享数字可共享redisredis数字池,比直接存字符串要数字池,比直接存字符串要省空间。省空间。牺牲时间换空间:牺牲时间换空间:1.1.维护字典表维护字典表 2.2.入库需要对应转化入库需要对应转化 3.3.出库计算也需要转换出库计算也需要转换BITMAPBITMAP使用总结使用总结本次本次redisredis根底知识中,我们介绍了根本的数据构造及常根底知识中,我们介绍了根本的数据构造及常用命令、数据类型的场景举例、用命令、数据类型的场景举例、redisredis主从复制机制、持主从复制机制、持久化机制、以及内
18、存优化。久化机制、以及内存优化。无论是数据构造选择还是内存优化,都要结合具体的业务无论是数据构造选择还是内存优化,都要结合具体的业务场景和业务要求,没有通用的最正确推荐模式,只有最符场景和业务要求,没有通用的最正确推荐模式,只有最符合需求的模式,所以我们需要我们不断尝试、不断优化。合需求的模式,所以我们需要我们不断尝试、不断优化。RedisRedis根底根底总结总结目录Redis根底知识Redis集群搭建12目的:高可用、负载均衡、易扩展、数据平安、性能提升目的:高可用、负载均衡、易扩展、数据平安、性能提升技术:集群地址虚拟技术:集群地址虚拟IPIP、网络通信、网络通信(监控消息监控消息)功能
19、:负载均衡、读写别离、故障转移功能:负载均衡、读写别离、故障转移集群集群集群指的是将几台效劳器集中在一起,实现同一业务方案1:haproxy+keepalived+redis集群 Redis Redis集群架构集群架构redisredis服务器服务器haproxyhaproxy服务器服务器REDISREDIS:通过:通过REDISREDIS的配置文件,可以实现主从复制、读的配置文件,可以实现主从复制、读写别离的工作。写别离的工作。HAPROXYHAPROXY:通过:通过haproxyhaproxy的配置文件,实现负载均衡,的配置文件,实现负载均衡,haproxyhaproxy负载均衡算法有多种
20、,一般采用轮询方式,当某负载均衡算法有多种,一般采用轮询方式,当某台台redis-salveredis-salve故障时,故障时,haproxyhaproxy会将其摘除。会将其摘除。KeepalivedKeepalived:是一个基于:是一个基于VRRPVRRP协议来实现效劳器高可用协议来实现效劳器高可用方案,可以利用其来防止方案,可以利用其来防止haproxyhaproxy单点故障单点故障,保证高可用。保证高可用。方案方案1 1redisredishaproxyhaproxykeepalivkeepaliveded机器1:redis主节点(10.1.49.53:6379)从节点(10.1.4
21、9.53:63791)从节点(10.1.49.53:63792)机器1:haproxy+keepalived机器2:从节点10.1.49.30:63793从节点10.1.49.30:63794机器2:haproxy+keepalived机器机器1:1:以以rootroot用户创立以下目录用户创立以下目录部署环境进入进入/usr/local/src/usr/local/src目录目录RedisRedis下载:下载:wget :/download.redis.io/releases/redis-2.8.9.tar.gzwget :/download.redis.io/releases/redis-
22、2.8.9.tar.gz解压解压redisredis安装包:安装包:编译编译redis:redis:复制配置文件,执行如下:复制配置文件,执行如下:修改修改redis.conf:redis.conf:bind设为10.1.49.53#redis效劳跟该IP绑定 dir设为/usr/local/redis/datadaemonize 设为yesport 6379修改修改 redis-slave1:redis-slave1:bind 10.1.49.53#bind 10.1.49.53#绑定绑定IPIPdir/usr/local/redis/datadir/usr/local/redis/data
23、port 63791port 63791slaveof 10.1.49.53 6379#slaveof 10.1.49.53 6379#是是10.1.49.53 637910.1.49.53 6379的从存储的从存储daemonize yes#daemonize yes#后台开启守护进程后台开启守护进程slave-read-only yes#slaveslave-read-only yes#slave只读只读注:不要覆盖原文件,找到相应的字段修改即可,其他保持原样注:不要覆盖原文件,找到相应的字段修改即可,其他保持原样修改修改 redis-slave2:redis-slave2:dir/usr
24、/local/redis/dataport 63792slaveof 10.1.49.53 6379daemonize yes启动启动slaveslave的的redisredis效劳:效劳:机器机器2:2:机器2上的部署如同机器1,只要配置从效劳器文件即可启动机器启动机器1 1上的上的redis-masterredis-master可通过ps ef|grep redis 查看效劳是否启动验证:验证:首先确认已启动:机器1上:redis-server redis-slave1redis-server redis-slave2机器2上:redis-server redis-slave3redis-
25、server redis-slave4到现在已完成redis集群配置,且只有.49.536379可写数据,其余slave机器只能读数据redis-cli-h10.1.49.53-p 6379Info可以看到这样子就是成功了:注1:配置文件中默认主从复制是开启的,通过上图可以看到命令机器为master,下挂4个从效劳器注2:查看我编写的redis启动关闭脚本 redis 该脚本放在/etc/init.d/中,通过service redis start/stop 使用1.如果报下面的错,说明master的redis没有启动,启动它既可2.在2号机子上执行报错,请检查防火墙策略 进入机器进入机器1
展开阅读全文