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 方式??梢詥为毷褂闷渲幸环N或將二者結合使用。 $$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] 列出當前的活躍頻 道?;钴S頻 道指的是那些至少有一個訂閱 者的頻道,訂閱 模式的客戶端 不計算在內。 2、PUBSUB NUMSUB [channel-1 . channel-N] 返回給定頻道的訂閱者數量,訂閱模式的客戶端不計算在內。 3、PUBSUB NUMPAT 返回訂閱模式的數量。注意,這個命令返回的不是訂閱 模式的客戶端的數量,而是客戶端 訂閱 的所有模式的數量總和。
展開閱讀全文
總結
以上是生活随笔為你收集整理的redis泡菜5_《redis讲解》PPT课件.pptx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【活动报名】挑战与机遇并存:AI 新时代
- 下一篇: 计算机专业的荣誉证书有哪些,大学期间获取