<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一上來就主從、集群、哨兵?這誰受得了

          共 4800字,需瀏覽 10分鐘

           ·

          2021-06-24 10:49

          概念篇

          一提到Redis,大家聽到最多的應(yīng)該就是“主從”、“集群”、“哨兵”了吧。對于不太精通的同學來說,乍一聽這些概念,有的人會心向往之,有的人會望而卻步。今天我們先來扒一扒Redis的“底褲”。

          什么是 Redis?

          RedisREmote DIctionary Server的簡稱,意為“遠程字典服務(wù)器”。它是基于BSD協(xié)議的完全開源的高性能的key-value數(shù)據(jù)庫。

          它是一個單線程卻性能極好的內(nèi)存數(shù)據(jù)庫,所有的操作都是按照順序線性執(zhí)行的,避免了不必要的上下文切換和競爭條件。

          采用非阻塞I/O的形式進行通信,利用Epoll的多路復(fù)用特性,提高了I/O效率。

          給大家提供兩個官方網(wǎng)址:

          • 中文網(wǎng)站:http://www.redis.cn/
          • 英文網(wǎng)站:http://www.redis.io/
          ?

          默認16個庫:0-15,默認使用0庫;統(tǒng)一密碼,默認端口6379(九宮格的merz

          ?

          Redis的特點

          • 「內(nèi)存存儲和持久化」:支持異步將內(nèi)存中的數(shù)據(jù)寫到硬盤上,同時不影響“取最新N個數(shù)據(jù)”的服務(wù)操作,重啟的時候可以再次加載進內(nèi)存
          • 「發(fā)布、訂閱消息系統(tǒng)」
          • 「定時器、計數(shù)器」:可設(shè)定過期時間
          • 「數(shù)據(jù)結(jié)構(gòu)多樣」:支持String、list,set,zset,hash等多種數(shù)據(jù)結(jié)構(gòu)的存儲
          • 「數(shù)據(jù)備份」:即master-slave模式的數(shù)據(jù)備份
          • 「高性能」:讀的速度是110000次/s,寫的速度是81000次/s
          • 「原子性」:所有操作都是原子性的:單個操作是原子性的;多個操作也支持事務(wù),通過MULTIEXEC指令包起來
          ?

          之前我們已經(jīng)介紹過Redis的安裝,此處不再贅述。

          ?

          命令篇

          key命令

          • select dbdb為數(shù)字,表示切換數(shù)據(jù)庫為db
          • Dbsize:查看當前數(shù)據(jù)庫的key的數(shù)量
          • Flushdb:清空當前庫的所有key
          • Flushall:清空所有庫的key(幾乎不用)
          • keys * :所有key羅列
          • exists key:判斷key是否存在
          • move key db:將key移動到db庫(當前庫的key沒有了),如果當前庫不存在key,則失?。蝗绻斍皫炫cdb庫都存在key值,則不移動
          • expire key seconds:為key設(shè)置過期時間
          • ttl key:查看還有多少秒過期,-1表示永不過期,-2表示已過期
          • type key:查看你的key是什么類型
          • del key:刪除key
          ?

          執(zhí)行命令:1生效,0不生效

          ?

          String(字符串)

          一個key對應(yīng)一個value,一個鍵最大能存儲512MB,是二進制安全的。

          命令

          • SET key value:設(shè)置key的值
          • GET key:獲取key的值
          • del key:刪除key
          • append key value:如果key已經(jīng)存在并且是一個字符串,APPEND命令將指定的value追加到該key原來值(value)的末尾
          • strlen key:返回key所儲存的字符串值的長度
          • getrange key start end:返回key中字符串值的子字符;(0,-1)返回全部
          • setrange key offset value:用value參數(shù)覆寫給定key所儲存的字符串值,從偏移量offset開始
          • setex key seconds value:(set with expire)給key設(shè)置value,并在seconds秒后過期
          • setnx key value:(set if not exist)先判斷keyvalue是否存在,不存在再插入,防止覆蓋
          • mset key value [key value ...]:同時設(shè)置一個或多個key-value
          • mget key1 [key2...]:同時獲取一個或者多個keyvalue
          • msetnx key value [key value ...]:同時設(shè)置一個或多個key-value對,當且僅當所有給定key都不存在(有存在,有不存在的都不存)
          • getset key value:將給定key的值設(shè)為value,并返回key的舊值(old value)。

          「一定要是數(shù)字才能進行加減」

          • incr key:將key中存儲的數(shù)字加一
          • decr key:將key中儲存的數(shù)字值減一
          • incrby key increment:將key所儲存的值加上給定的增量值(increment
          • decrby key decrement:將key所儲存的值減去給定的減量值(decrement

          Hash(哈希)

          鍵值對集合,適合存儲對象,類似于java中的map;每個hash可以存儲2^32 -1 鍵值對(40多億)

          命令

          • hset key field value:將哈希表key中的字段field的值設(shè)為value
          • hget key field:獲取存儲在哈希表中指定字段的值
          • hmset key field1 value1 [field2 value2]:同時將多個field-value(域-值)對設(shè)置到哈希表key
          • hmget key field1 [field2]:獲取所有給定字段的值
          • hgetall key:獲取在哈希表中指定key的所有字段和值
          • hdel key field1 [field2]:刪除一個或者多個哈希表字段
          • hlen key:獲取哈希表中字段的數(shù)量
          • hexists key field:查看哈希表key中,指定的字段是否存在
          • hkeys key:獲取哈希表中所有field的值
          • hvals key:獲取哈希表中所有value的值
          • hincrby key field increment:哈希表key中指定字段的整數(shù)值加上增量increment
          • hincrbyfloat key field increment:哈希表key中指定字段的浮點數(shù)值加上增量increment
          • hsetnx key field value:只有在字段field不存在時,設(shè)置哈希表字段的值

          List(列表)

          Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。

          • lpush從左邊(首)插入,rpush從右邊(尾)插入
          • lpop從左邊移除元素并返回該元素,rpop從右邊移除元素并返回該元素

          列表最多可存儲2^32 - 1元素(每個列表可存儲40多億)。

          命令

          • lpush key value[value...]:將一個或多個值插入到列表頭部
          • rpush key value[value...]:將一個或多個值插入到列表尾部
          • lrange key start stop:獲取隊列指定范圍內(nèi)的元素
          • lpop key:移出并獲取列表的第一個元素
          • rpop key:移除列表的最后一個元素,返回值為移除的元素
          • lindex key index:按照索引下標獲得元素,也可以使用負數(shù)下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數(shù)第二個元素,以此類推。
          • llen key:獲取列表長度
          • lrem key count value:刪除countvalue
          • ltrim key start stop:對一個列表進行修剪(trim),就是說,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除(「閉區(qū)間」
          • rpoplpush source destination:移除列表的最后一個元素,并將該元素添加到了另一個列表并返回(尾出頭入)
          • lset key index value:將keyindex位置設(shè)置為value
          • linsert key before/after 【point】 value:在列表的元素前或者后插入元素

          性能

          1. 如果鍵不存在,則創(chuàng)建新的鏈表;
          2. 如果鍵已存在,新增內(nèi)容;
          3. 如果值全部移除,對應(yīng)的鍵也就消失了;
          4. 鏈表的操作頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。

          Set(集合)

          RedisSetString類型的無序集合,集合成員是唯一的。集合是通過哈希表(HashTable)實現(xiàn)的,所以添加、刪除、查找的復(fù)雜度都是 O(1)。集合中最大的成員數(shù)為2^32 - 1( 每個集合可存儲40多億個成員)。

          命令

          • sadd key member[member...]:集合中添加一個或者多個成員(無序)
          • smembers key:返回集合中的所有成員
          • sismember key member:判斷member元素是否是集合key的成員
          • scard key:獲取集合的成員數(shù)
          • srem key member[member...]:刪除集合中的一個或者多個元素
          • srandmember key [count]:返回集合中一個或多個隨機數(shù)---------適合做挖財項目
          • spop key:移除并返回集合中的一個隨機元素
          • smove source destination member:將member元素從source集合移動到destination

          數(shù)學集合類

          • sdiff key1 [key2]:返回第一個集合與其他集合之間的差異
          • sinter key1 [key2]:返回給定所有集合的交集
          • sunion key1 [key2]:返回所有給定集合的并集

          zset(sorted set有序集合)

          Rediszsetset一樣也是string類型元素的集合,且不允許重復(fù)的成員。不同的是每個元素都會關(guān)聯(lián)一個double類型的分數(shù)。

          redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(shù)(score)卻可以重復(fù)。添加元素到集合,元素在集合中存在則更新對應(yīng)score。

          命令

          • zadd key score1 member1 [score2 member2]:向有序集合添加一個或者多個成員,或者更新已存在成員的分數(shù)
          • ZRANGE key start stop [WITHSCORES]:通過索引區(qū)間返回有序集合指定區(qū)間內(nèi)的成員(是否包含分數(shù)信息)
          • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]:通過分數(shù)返回范圍內(nèi)的member成員(是否包含分數(shù)),其中“(”表示不包含;limit作用是返回限制 (limit start count

          「示例:」zrangebyscore zset01 60 (90 withscores limit 2 2:從zset01中選取分數(shù)大于等于60,小于90的從第二個索引開始往后兩個的成員

          • zrem key member[member...]:移除有序集合中的一個或多個成員
          • zcard key:獲取有序集合的成員數(shù)
          • zcount key min max:獲取有序集合的大于min小于max的成員數(shù)
          • zrank key member:獲取member的索引
          • zscore key member:獲取有序集合的member的分數(shù)

          REV

          • ZREVRANK key member:返回有序集合中指定成員的排名,有序集成員按分數(shù)值遞減(從大到小)排序
          • ZREVRANGE key start stop [WITHSCORES]:通過索引返回有序集中指定區(qū)間內(nèi)的成員,分數(shù)從高到低
          • ZREVRANGEBYSCORE key max min [WITHSCORES]:返回有序集中指定分數(shù)區(qū)間內(nèi)的成員,分數(shù)從高到低排序

          推薦閱讀:
          Spring Boot 集成 Kafka
          分布式配置中心選型,為什么選擇Apollo?
          為什么MySQL選擇RR作為默認隔離級別?

          關(guān)互聯(lián)網(wǎng)全棧架構(gòu)

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜激情啪啪 | 国产精品观看 | 欧美女人超碰 | 天天弄天天操 | 免费看片A级毛片免费看电影男 |