redis泡菜5_《redis讲解》PPT课件.pptx

redis讲解 王江财 目 录 1 2 3 4 5 6 redis简介 redis数据类型 主从复制 持久化 redis集群 jedis及集群应用 7 发布与订阅功能 $$1redis简介 一、什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据 库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis支持的键值数据类型如下: 1、字符串类型 2、散列类型 3、列表类型 4、集合类型 5、有序集合类型。 $$1redis简介 二、redis应用场景 • 缓存 • 分布式集群架构中的session分离 • 聊天室的在线好友列表 • 任务队列。(秒杀、抢购、12306等等) • 应用排行榜 • 网站访问统计 • 数据过期处理(可以精确到毫秒) $$1redis简介 三、redis与memcache的优缺点 1 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启 的时候可以再次加载进行使用。 2 、Redis不仅仅支持简单的string类型的数据,同时还提供list,set, hash等数据结构的存储。 3 、Redis支持数据的备份,即master-slave模式的数据备份。 4、内存超出时redis将不常用缓存swap到 磁盘。 5、redis支持集群,添加节点删除节点不丢数据 6、redis是单线程 $$1redis简介 四、服务器端常用命令 命令描述例子 ping检查链 接是否存活 ping,返回pong,则存活 echo在命令行打印内容echo context info获取服务器上的信息和统计info quit退出客户端quit select选择数据库select dbno dbsize返回当前数据库中key的数目dbsize flushdb删除当前数据库中的所有keyflushdb flushall删除所有数据库中的所有keyflushall $$2redis数据类型 一、string类型 1、在Redis中字符串类型的Value最多可以容纳的数据长度是512M。 命令描述例子 set赋值set key value get获取值get key append追加字符串append key value incr自增(+1)incr key decr自减(-1)decr key incrby自增,增加指定步长incrby key increment decrby自减,减少指定步长decrby key decrement getset先获取元素再赋值getset key value setex赋值并指定key的存活时间setex key second value $$2redis数据类型 命令描述例子 setnxkey不存在就赋值,否则不做操作setnx key value strlen返回key的值的长度strlen key setrange字符串替换(包含start)setrange key start value getrange获取指定位置字符串getrange key start end mset同时设置多个key valuemset key value [key2 value2.] mget同时获取多个key的值mget key [key2.] msetnxkey不存在同时设置多个key value, 否则不设置 msetnx key value [key2 value2] setbit设置二进制的值setbit key offset value getbit获取二进制的值getbit key offset $$2redis数据类型 2.应用: 1)缓存 2)生成全局主键 3)计数器 $$2redis数据类型 二、hash类型 1、hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不 支持散列类型、集合类型等其它类型。如下: $$2redis数据类型 命令描述例子 hset给key中的filed字段赋值hset key field value hget 获取可以中filed字段的值hget key field hexists判断key中是否存在filedhexists key field hlen获取key中filed的数量hlen key hdel删除key中的filed字段hdel key field [field2] hgetall获取key中所有的field和valuehgetall key hmset同时设置多个field和valuehmset key field value [field2 value2] hmget同时获取多个field的值hmget key field [field2] hsetnx如果field不存在赋值,否则不操作hsetnx key field value hincrby给field的值增加指定的步长hincrby key field increment hkeys获取所有的keyhkeys key hvals获取所有的valuehvals key $$2redis数据类型 2、应用: 1)商品信息 $$2redis数据类型 三、list类型 1、列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添 加元素,或者获得列表的某一个片段。 命令描述例子 lpush在list头部添加值lpush key value [value2] rpush在list尾部添加值rpush key value [value2] lrange获取指定位置的数据lrange key start end lpop从头部弹出key的值(删除)lpop key rpop从尾部弹出key的值(删除)rpop key rpoplpush从一个list的尾部弹出插入到另一个list的 头部 rpoplpush source destnation $$2redis数据类型 命令描述例子 llen返回key的长度llen key lrem删除前面几个值为value的元素lrem key count value lset按下标赋值lset key index value lindex返回下标的值lindex key index ltrim截取list 指定位置的值ltrim key start end linsert在某个元素的前面或后面插入值linsert key before|after pivot value lpushxkey存在头部添加,否则不做操作lpushx key value rpushxkey存在在尾部添加,否则不做操作rpushx key value $$2redis数据类型 2、应用: 1)商用户发布商品评论 将评论信息转成json存储到list中。用户在页面查询评论列表,从redis中取出json 数据展示到页面。品的评论 2)队列 $$2redis数据类型 四、set类型 1、set就是集合类型,集合中每个元素都不相同,且没有顺序。 命令描述例子 sadd添加值sadd key member [member2] smembers遍历集合smembers key scard获取key的成员数量scard key srem删除指定成员srem key member [member2] sismember判断成员是否存在sismember key member spop随机弹出一个值(删除)spop key $$2redis数据类型 命令描述例子 srandmember随机弹出一个成员(不删除)srandmember key smove移动一个集合的成员到另一个集合smove source destination member sdiff求集合的差集sdiff key [key2] sdiffstore求集合的差集并存到新集合中sdiffstore destination key [key2] sinter求集合交集sinter key [key2] sinterstore求集合交集并存到新集合中sinterstore destination key [key2] sunion求集合并集suion key [key2] sunionstore求集合并集并存到新集合中suionstore destination key [key2] $$2redis数据类型 2、应用: 1)有多少特定用户访问了特定资源 $$2redis数据类型 五、sorted set类型 1、在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得 我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的 前N个元素、获取指定分数范围内的元素等与分数有关的操作。 2有序集合和list类型二者有着很大区别: 1)列表类型是通过链 表实现 的,获取靠近两端的数据速度极快,而当元素增多后 ,访问 中间数据的速度会变慢。 2)有序集合类型使用散列表实现 ,所有即使读取位于中间部分的数据也很快。 3)列表中不能简单 的调整某个元素的位置,但是有序集合可以 4)有序集合要比列表类型更耗内存。 $$2redis数据类型 命令描述例子 zadd添加成员zadd key score member [score member] zcard获取成员数量zcard key zcount获取指定分数之间的成员数量zcount key min max zincrby给成员增加指定分数zincrby key increment member zrange遍历指定下标之间的成员[及分数](分 数从小到大排列) zrange key start end [withscores] zrangebyscore遍历指定分数之间的成员(及分数)zrangebyscore key min max [withscores] zrank返回成员的下标(分数从小到大排列 ) zrank key member zrem删除指定成员zrem key member [member2] zrevrange遍历指定成员[及分数](分数从大到小 排列) zrevrange key start end [withscores] $$2redis数据类型 命令描述例子 zrevrank返回成员下标(分数从大到小)zrevrank key member zscore获取指定成员的分数zscore key member zrevrangebyscore获取在指定分数之间的成员[及 分数](分数从高到低) zrevrangebyscore key max min [withscores] zremrangebyrank删除下标之间的成员zremrangebyrank key start end zremrangebyscore删除指定分数之间的成员zremrangebyscore key min max $$2redis数据类型 3、应用: 1)积分排行榜 2)销售排行榜 $$2redis数据类型 六、key命令 命令描述例子 keys获取所有的keykeys pattern del删除指定keydel key [key2] exists判断key是否存在exists key move移动一个key到另一个库中move key db rename给key重新命名rename key newkey renamenx给key重新命名,当newkey存在是不操 作 renamenx key newkey persist将key持久化persist key $$2redis数据类型 命令描述例子 expire设置key的存活时间expire key sexonds expireat设置key的存活时间(年月日} 时间戳 expireat key timestamp ttl实时查 看key的剩余存活时间ttl key pttl查看key的剩余存活时间(毫 秒) pttl key randomkey随机返回一个keyrandomkey type返回key中的value的类型type key select $$3redis的持久化 Redis的高性能是由于其将所有数据都存储在了内存中,为 了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中 同步到硬盘中,这一过程就是持久化。 Redis支持两种方式的持久化,一种是RDB方式,一种是AOF 方式。可以单独使用其中一种或将二者结合使用。 $$3redis的持久化 一、RDB RDB方式的持久化是通过快照(snapshotting)完成的,当符 合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬 盘。 RDB是Redis默认采用的持久化方式,在redis.conf配置文件中 默认有此下配置: save 900 1 save 300 10 save 60 10000 $$3redis的持久化 二、AOF 以日志形式记录服务器每一个操作,在Redis服务器启动之 初会读取该文件来重新构建数据库,以保证启动后数据库中的数 据是完整的。 默认情况下Redis没有开启AOF(append only file)方式的持 久化,可以通过appendonly参数开启: appendonly yes $$3redis的持久化 优势 : 1、RDB 是一个非常紧凑(compact)的文件,它保存了Redis 在某个时间 点上的数据集。这 种文件非常适合用于进行备份:可以自己设置保存频率。 2、RDB 非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑, 可以(在加 密后)将它传送到别的数据中心,或者亚马逊 S3 中。 3、 RDB 可以最大化Redis 的性能:父进程在保存RDB 文件时唯一要做的就是fork 出一个子进 程,然 后这个子进程就会处理接下来的所有保存工作,父进程无须执 行任何磁盘I/O 操作。 4、 RDB 在恢复大数据集时的速度比AOF 的恢复速度要快。 劣势:rdb是以每隔一段时间进 行一次快照进行的数据持久,如果一旦在这一时间 段出现服 务器故障,将会灾难性的。 三、RDB持久化方式优劣势: $$3redis的持久化 优势 : 1、使用AOF 持久化会让Redis 变得非常耐久(much more durable):你可以设置不同的fsync 策略,比如无fsync ,每秒钟一次fsync ,或者每次执行写入命令时fsync 。 2、Redis 可以在AOF 文件体积变得过大时,自动地在后台对AOF 进行重写 3、AOF 文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis 协议的格式 保存,因此AOF 文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。 劣势: 1、对于相同数量的数据集而言,AOF文件通常要大于RDB文件 2、根据所使用的fsync 策略,AOF 的速度可能会慢于RDB 。 三、AOF持久化方式优劣势: $$4redis的主从复制 一、主从复制 如果主服务器宕机,从服务器可以替代主服务器来为客户端服务,相当于备份。并且可以 把持久化的配置在从服务器端来减轻主服务器的压力,主服务器不做持久化,由从服务器负责。 二、原理 1、无论是初次连接还是重新连接,当建立一个从服务器时,从服务器都将向主服务器发送一个 SYNC 命令。 2、接到SYNC 命令的主服务器将开始执行BGSAVE ,并在保存操作执行期间,将所有新执行的写 入命令都保存到一个缓冲区里面。 3、当BGSAVE 执行完毕后,主服务器将执行保存操作所得的.rdb 文件发送给从服务器 4、从服务器接收这个.rdb 文件,并将文件中的数据载入到内存中。 5、主服务器会以Redis 命令协议的格式,将写命令缓冲区中积累的所有内容都发送给从服务器。 $$4redis的主从复制 三、部分重同步 从服务器可以在主从服务器之间的连接断开时进行自动重连,在Redis 2.8 版本之前,断线之后重连的从服 务器总要执行一次完整重同步(full resynchronization)操作,但是从2.8 版本开始,从服务器可以根据 主服务器的情况来选择执行完整重同步还是部分重同步(partialresynchronization) 四、部分重同步原理 这个特性需要主服务器为被发送的复制流创建一个内存缓冲区(in-memory backlog),并且主服务器和所有 从服务器之间都记录 一个复制偏移量(replication offset)和一个主服务器ID (master run id),当出现网 络连 接断开时,从服务器会重新连接,并且向主服务器请求继续执 行原来的复制进程: • 如果从服务器记录 的主服务器ID 和当前要连接的主服务器的ID 相同,并且从服务器记录 的偏移量所 指定的数据仍然保存在主服务器的复制流缓冲区里面,那么主服务器会向从服务器发送断线时 缺失的 那部分数据,然后复制工作可以继续执 行。 • 否则的话,从服务器就要执行完整重同步操作。 $$4redis的主从复制 五、配置 配置一个从服务器非常简单,只要在配置文件中增加以下的这一行就可以了 : slaveof 192.168.1.1 6379 当然,你需要将代码中的192.168.1.1 和6379 替换成你的主服务器的IP 和 端口号。 另外一种方法是调用SLAVEOF 命令,输入主服务器的IP 和端口,然后同步就 会开始: 127.0.0.1:6379 SLAVEOF 192.168.1.1 6379 OK $$5redis集群 一、集群架构 $$5redis集群 一、集群架构 $$5redis集群 一、集群架构 $$5redis集群 一、集群架构 $$6发布与订阅 一、PSUBSCRIBE • PSUBSCRIBE pattern [pattern .]订阅一个或多个符合给定模 式的频道。 • 每个模式以* 作为匹配符,比如it* 匹配所有以it 开头的频道( it.news 、it.blog 、it.tweets 等等), • news.* 匹配所有以news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。 $$6发布与订阅 二、SUBSCRIBE • SUBSCRIBE channel [[channel . ] • 订阅给定的一个或多个频道的信息。 三、PUBLISH • PUBLISH channel message • 将信息message 发送到指定的频道channel 。 $$6发布与订阅 四、PUNSUBSCRIBE • PUNSUBSCRIBE [pattern [pattern .]] • 指示客户端退订所有给定模式。 • 如果没有模式被指定,也即是,一个无参数的PUNSUBSCRIBE 调用被执行,那么客户端使用 PSUBSCRIBE命令订阅的所有模式都会被退订。在这种情况下,命令会返回一个信息,告知客户端所 有被退订的模式。 五、PUBLISH • UNSUBSCRIBE [channel [channel .]] • 指示客户端退订给定的频道。 • 如果没有频道被指定,也即是,一个无参数的UNSUBSCRIBE 调用被执行,那么客户端使用SUBSCRIBE 命令订阅的所有频道都会被退订。在这种情况下,命令会返回一个信息,告知客户端所有被退订的频 道。 $$6发布与订阅 六、PUBSUB 1、PUBSUB CHANNELS [pattern] 列出当前的活跃频 道。活跃频 道指的是那些至少有一个订阅 者的频道,订阅 模式的客户端 不计算在内。 2、PUBSUB NUMSUB [channel-1 . channel-N] 返回给定频道的订阅者数量,订阅模式的客户端不计算在内。 3、PUBSUB NUMPAT 返回订阅模式的数量。注意,这个命令返回的不是订阅 模式的客户端的数量,而是客户端 订阅 的所有模式的数量总和。

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值