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

概念篇
一提到Redis,大家聽到最多的應(yīng)該就是“主從”、“集群”、“哨兵”了吧。對于不太精通的同學來說,乍一聽這些概念,有的人會心向往之,有的人會望而卻步。今天我們先來扒一扒Redis的“底褲”。
什么是 Redis?
Redis是REmote 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ù),通過 MULTI和EXEC指令包起來
?之前我們已經(jīng)介紹過Redis的安裝,此處不再贅述。
?
命令篇
key命令
select db:db為數(shù)字,表示切換數(shù)據(jù)庫為db庫Dbsize:查看當前數(shù)據(jù)庫的key的數(shù)量Flushdb:清空當前庫的所有keyFlushall:清空所有庫的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:刪除keyappend 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)先判斷key的value是否存在,不存在再插入,防止覆蓋mset key value [key value ...]:同時設(shè)置一個或多個key-value對mget key1 [key2...]:同時獲取一個或者多個key的value值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è)為valuehget 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ù)值加上增量incrementhincrbyfloat key field increment:哈希表key中指定字段的浮點數(shù)值加上增量incrementhsetnx 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:刪除count個valueltrim key start stop:對一個列表進行修剪(trim),就是說,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除(「閉區(qū)間」)rpoplpush source destination:移除列表的最后一個元素,并將該元素添加到了另一個列表并返回(尾出頭入)lset key index value:將key的index位置設(shè)置為valuelinsert key before/after 【point】 value:在列表的元素前或者后插入元素
性能
如果鍵不存在,則創(chuàng)建新的鏈表; 如果鍵已存在,新增內(nèi)容; 如果值全部移除,對應(yīng)的鍵也就消失了; 鏈表的操作頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
Set(集合)
Redis的Set是String類型的無序集合,集合成員是唯一的。集合是通過哈希表(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有序集合)
Redis的zset和set一樣也是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ù)從高到低排序
歡迎關(guān)注微信公眾號:互聯(lián)網(wǎng)全棧架構(gòu),收取更多有價值的信息。
