Redis簡介
Redis是一款開源免費甩牺、高性能的非關(guān)系型數(shù)據(jù)庫
非關(guān)系型數(shù)據(jù)庫(Not Only SQL): 簡稱是NoSQL扼菠,一般我們習(xí)慣解釋成非關(guān)系型數(shù)據(jù)庫存和,其實應(yīng)該理解成不止是關(guān)系型數(shù)據(jù)庫,或者超關(guān)系型數(shù)據(jù)庫。一般用來存儲不規(guī)范储玫、復(fù)雜的數(shù)據(jù)形式。相比關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫性能更好翅雏,擴展性更強,但是對于財務(wù),金融,銀行等規(guī)模巨大,流程規(guī)范人芽,數(shù)據(jù)格式統(tǒng)一的行業(yè)來講望几,使用關(guān)系數(shù)據(jù)庫更佳。
Redis特點
- 數(shù)據(jù)類型豐富
- 支持
master-slave
模式的數(shù)據(jù)備份 - 支持?jǐn)?shù)據(jù)持久化萤厅,可將內(nèi)存中的數(shù)據(jù)保存在磁盤
- 性能極高
- 所有操作都是原子性操作
原子性操作: A賬戶有3000塊錢橄抹,B賬戶有2000塊錢,現(xiàn)在從A賬戶向B賬戶轉(zhuǎn)1000塊錢惕味,要做如下兩個操作: 1. 從A賬戶中減去1000塊錢楼誓,那么A賬戶現(xiàn)在有2000塊錢;2. B賬戶加上1000塊錢名挥, 那么B賬戶現(xiàn)在有3000塊錢疟羹。如果在A賬戶減去1000塊錢的時候,忽然發(fā)生了意外,比如停電榄融、斷網(wǎng)之類的参淫,導(dǎo)致轉(zhuǎn)賬這個操作中止了,此時A賬戶的錢已經(jīng)減去了愧杯,但是B賬戶沒有增加1000塊錢涎才,那么我們就稱這個操作失敗了,要進(jìn)行回滾力九∷M回滾就是回到?jīng)]轉(zhuǎn)賬之前的狀態(tài),此時A賬戶照常有3000塊跌前,B賬戶有2000塊业扒。
這種要么一起成功(A賬戶減少1000塊,B賬戶增加1000塊)舒萎,要么一起失敵檀ⅰ(A、B賬戶都回到原來狀態(tài)臂寝,A有3000塊錢章鲤,B有2000塊錢)的操作就叫原子性操作。
Redis安裝
-
下載Redis源碼
-
解壓
tar xzvf redis-3.2.1.tar.gz
-
編譯安裝
cd redis-3.2.1
make && make install
ps:遇上 `Hint: It's a good idea to run 'make test';` ,我們可以先安裝tcl工具 `yum install tcl` 咆贬,然后執(zhí)行 `make test` 進(jìn)行檢測败徊。得到 `\o/ All tests passed without errors!` 的提示,就說明安裝成功掏缎。
-
默認(rèn)安裝的路徑
Redis客戶端:
/usr/local/bin/redis-cli
Redis服務(wù)端:
/usr/local/bin/redis-server
-
啟動Redis
啟動Redis服務(wù):[root@CentOS6 /]# redis-server
Redis配置密碼
-
不重啟Redis皱蹦,設(shè)置密碼
127.0.0.1:6379> config set requirepass 123456 OK 127.0.0.1:6379> 127.0.0.1:6379> config get requirepass (error) NOAUTH Authentication required.
-
修改配置文件,設(shè)置密碼
在
redis.conf
配置文件中修改密碼眷蜈,#requirepass foobared
, 去掉前面的注釋沪哺,并設(shè)置自己的密碼,保存配置文件并重啟ps:重啟的時候一定需要指定修改后的配置文件酌儒,否則密碼設(shè)置不起效
Redis數(shù)據(jù)類型
字符串
字符串是Redis最基本的數(shù)據(jù)類型辜妓,一個key對應(yīng)一個value,一個key最大能存儲512MB忌怎。
常用字符串命令
-
SET key value
設(shè)置指定 key 的值 -
SETX key timeout value
設(shè)置指定 key 的值及過期時間 -
GET key
獲取指定 key 的值 -
GETRANGE key start end
截取key中的字符串 -
GETSET key value
重置key的值籍滴,并返回key的舊值(key沒有舊值時,返回nil) -
SETBIT key offset value
設(shè)置key所存儲的字符串榴啸,offset位上的值(offset上的值為0或1) -
GETBIT key offset
獲取key所存儲的字符串孽惰,offset位上的值 -
STRLEN key
返回 key 所存儲的字符串的長度 -
INCRBY key increment
將 key 所存儲的值加上特定的增量 increment -
DECRBY key decrement
將 key 所存儲的值減去特定的減量值 decrement -
APPEND key value
如果 key 已經(jīng)存在,并且是一個字符串鸥印,APPEND命令將 value 追加到原value的末尾
特點
- 自增勋功、自減
- 位運算
常用應(yīng)用場景
- 利用
setbit腥例、getbit、bitcount
統(tǒng)計用戶簽到酝润、活躍用戶(注意:bitcount的start燎竖、end參數(shù)指的是字符串的位置,不是對應(yīng)位的位置) - 利用
INCR
做原子計數(shù)器要销,生成唯一序列號 - 設(shè)置 key 有效期构回,上操作鎖或者防止短時間內(nèi)頻繁發(fā)送短信驗證
哈希
一個哈希數(shù)據(jù),里面包含了N對鍵值對
常用哈希命令
HSET key field value
將哈希表 key 中的字段 field 的值設(shè)為 valueHMSET key field1 value1 field2 value2
將多個 field-value(域-值)對設(shè)置到哈希表 key 中HSETNX key field value
當(dāng)字段 field 不存在時疏咐,設(shè)置哈希表字段值HLEN key
獲取哈希表中字段的數(shù)量HKEYS key
獲取哈希表中所有的字段HGET key field
獲取存儲在哈希表中指定字段的值HMGET key field1 field2
獲取所有給定字段的值HGETALL key
獲取哈希表 key 中纤掸,所有的字段和值HVALS key
獲取哈希表中所有的值HEXISTS key field
查看哈希表 key 中,指定的字段是否存在HINCRBY key field increment
為哈希表 key 中指定字段加上增量 incrementHSCAN key cursor [MATCH pattern] [COUNT count]
分批次遍歷哈希表 key 中的鍵值對浑塞,cursor為0時表示開始一次新的遍歷借跪,每次遍歷返回來的cursor,作為下次遍歷的cursor酌壕,直至遍歷返回的cursor為0時掏愁,代表剛好結(jié)束一次完整的key遍歷(cursor類似接力棒,從0到0代表一次完整的遍歷卵牍。HSCAN
命令并且有match
匹配功能HDEL key field1 field2
刪除一個或多個字段
特點
- 數(shù)據(jù)結(jié)構(gòu)有明顯的層級關(guān)系
常用應(yīng)用場景
- 存儲有層級關(guān)系果港,并且部分?jǐn)?shù)據(jù)需要變更的,如用戶信息
列表
一個列表糊昙,包含了N個字符串
-
LPUSH key string1
往列表左側(cè)插入一個或多個值 -
RPUSH key string1
往列表右側(cè)插入一個或多個值 -
LINSERT key BEFORE/AFTER oldString newString
在列表指定元素前(后)插入一個值(元素不存在或列表不存在辛掠,則不執(zhí)行任何操作) -
LSET key index string
通過索引設(shè)置列表元素的值 -
LINDEX key sindex
通過索引獲取列表中的元素 -
LLEN key
獲取列表的長度 -
LRANGE key start stop
獲取列表指定范圍內(nèi)的元素 -
LPOP key
移出列表中的第一個元素,并返回移出的元素 -
RPOP key
移出列表中的最后一個元素释牺,并返回移出的元素 -
BLPOP key time
移出列表中的第一個元素萝衩,并返回移出的元素,如果列表為空没咙,則在time
秒之后彈出nil
-
BRPOP key time
移出列表中的最后一個元素猩谊,并返回移出的元素,如果列表為空镜撩,則在time
秒之后彈出nil
-
BRPOPLPUSH key1 key2 time
將key1
最右側(cè)的元素彈出到key2
的最左側(cè)预柒,如果key1
沒有元素队塘,則等待time
秒后袁梗,彈出nil
-
LREM key count string
移除列表中與string
相等的元素,共移除count
個憔古,如果count
大于0遮怜,則從表頭向表尾搜索,如果count
小于0鸿市,則從表尾向表頭搜索 -
LTRIM key start stop
只保留start
到stop
區(qū)間的元素锯梁,其余元素均移除
特點
- 有序即碗,自由實現(xiàn)堆、棧的功能
- 輪詢監(jiān)控
- 索引取區(qū)間
常用應(yīng)用場景
- 利用
LTRIM key start stop
獲取網(wǎng)站最后5個訪問用戶陌凳、最新消息排行榜 - 利用
PUSH
POP
當(dāng)成隊列剥懒,進(jìn)行多任務(wù)處理 - 利用
BRPOPLPUSH key1 key1 time
,使用相同的key作為BRPOPLPUSH的兩個參數(shù),無限循環(huán)整個列表合敦,比如:一個服務(wù)器監(jiān)控程序初橘,并行檢查一組網(wǎng)站,確保網(wǎng)站的可訪問性 - 利用
BRPOP key time
進(jìn)行事件提醒充岛,在新元素到達(dá)時立即處理保檐,新元素未到達(dá)一直阻塞住,避免輪詢占用資源
集合(Set)
一個集合(key)崔梗,包含了N個集合成員(value)夜只。集合成員是無序的,且是唯一的蒜魄,一個集合最多可以有2^32 - 1個成員
-
SADD key value1 value2
向集合添加一個或多個成員 -
SMEMBERS key
獲取一個集合中所有的成員 -
SCARD key
獲取集合的成員數(shù) -
SISMEMBER key member
判斷member
是否是集合key
的成員 -
SPOP key
移除并返回集合中的一個隨機元素 -
SRANDMEMBER key [count]
返回集合中一個或多個隨機元素 -
SREM key member1 [member2]
移除集合中一個或多個成員 -
SDIFF key1 key2
返回key1
相對于key2
的差集(key1
有扔亥,key2
沒有) -
SDIFFSTORE destination key1 [key2]
返回給定所有集合的差集并存儲在 destination 中(key1
有,key2
沒有) -
SINTER key1 [key2]
返回給定所有集合的交集 -
SINTERSTORE destination key1 [key2]
返回給定所有集合的交集并存儲在 destination 中 -
SUNION key1 [key2]
返回所有給定集合的并集(key1
Ukey2
) -
SUNIONSTORE destination key1 [key2]
所有給定集合的并集存儲在 destination 集合中 -
SMOVE source destination member
將 member 元素從 source 集合移動到 destination 集合 -
SSCAN key cursor [MATCH pattern] [COUNT count]
分批次遍歷集合 key 中的鍵值對谈为,cursor為0時表示開始一次新的遍歷砸王,每次遍歷返回來的cursor,作為下次遍歷的cursor峦阁,直至遍歷返回的cursor為0時谦铃,代表剛好結(jié)束一次完整的key遍歷(cursor類似接力棒,從0到0代表一次完整的遍歷榔昔。SSCAN
命令并且有match
匹配功能
特點
- 唯一性
- 差集驹闰、并集
常用應(yīng)用場景
- 利用交并集操作,可以查找共同好友撒会、好友推薦
- 利用差集操作嘹朗,可以求出新增用戶(例: 利用Redis集合(Set)統(tǒng)計新增用戶和次日留存率)
- 利用唯一性,可以統(tǒng)計網(wǎng)站UV
有序集合(sorted set)
和集合相似(一個key
,N個value
诵肛,value
唯一)屹培,不同點是每個元素都會關(guān)聯(lián)一個double類型的分?jǐn)?shù),Redis通過分?jǐn)?shù)為集合成員進(jìn)行排序
-
ZADD key score1 value1 [score2 value2]
向有序集合添加一個或多個成員怔檩,或者更新已存在成員的分?jǐn)?shù) -
ZCARD key
獲取有序集合的成員數(shù) -
ZCOUNT key min max
計算在指定區(qū)間內(nèi)的成員數(shù) -
ZINCRBY key increment value
對指定成員加上增量increment -
ZINTERSTORE newKey numbers key1 key2
將key1``key2
的交集存入newKey
中褪秀,newKey
中元素的分?jǐn)?shù)是key1
和key2
中分?jǐn)?shù)之和(使用時一定要指定正確的 Key Number) -
ZLEXCOUNT key min max
當(dāng)元素的分?jǐn)?shù)都相等時,此命令返回指定字符區(qū)間之內(nèi)的元素(如:ZLEXCOUNT z1 [a [c
在z1
有序集合所有元素分?jǐn)?shù)相同的情況下薛训,返回z1
中a~c之間的元素) -
ZRANGE key start stop
返回指定索引區(qū)間的元素(下標(biāo)參數(shù)start``stop
都以0為底) -
ZRANGEBYLEX key min max
返回指定字典區(qū)間內(nèi)的元素(例:ZRANGEBYLEX Z1 [a [b
返回集合Z1
中a
到b
之間的元素) -
ZRANGEBUSCORE key min max
返回指定分?jǐn)?shù)之間的元素 -
ZRANK key value
返回有序集合中指定元素的索引 -
ZREM key value
移除有序集合中的指定成員 -
ZREMRANGEBYLEX key min max
刪除指定字典區(qū)間的元素 -
ZREMRANGEBYRANK key start stop
刪除指定索引區(qū)間內(nèi)的元素 -
ZREMRANGEBYSCORE key min max
刪除指定分?jǐn)?shù)區(qū)間的所有元素 -
ZREVRANGE key start stop
返回指定索引區(qū)間內(nèi)的成員媒吗,分?jǐn)?shù)從高到低 -
ZREVRANGEBYSCORE key max min
返回指定分?jǐn)?shù)區(qū)間的成員,分?jǐn)?shù)從高到低 -
ZREVRANK key member
返回有序集合中指定元素的排名(排名由分?jǐn)?shù)值從大到小排列乙埃,分?jǐn)?shù)最大的元素排名為0) -
ZSCORE key value
返回指定元素的分?jǐn)?shù) -
ZUNIONSTORE newKey numkeys key [key ...]
計算給定的有序集合的并集闸英,并存儲在newKey
中 -
ZSCAN key cursor [MATCH pattern] [COUNT count]
分批次遍歷有序集合 key 中的鍵值對锯岖,cursor為0時表示開始一次新的遍歷,每次遍歷返回來的cursor甫何,作為下次遍歷的cursor出吹,直至遍歷返回的cursor為0時,代表剛好結(jié)束一次完整的key遍歷(cursor類似接力棒辙喂,從0到0代表一次完整的遍歷趋箩。ZSCAN
命令并且有match
匹配功能
特點
- 可以按照索引、字典區(qū)間加派、分?jǐn)?shù)區(qū)間3個不同的維度取數(shù)據(jù)叫确、刪數(shù)據(jù)
- 可以自定義數(shù)據(jù)的順序
- 可求并集、交集
應(yīng)用場景
- 帶權(quán)重的隊列(List只是按照時間排序的隊列芍锦,有序集合可以實現(xiàn)自定義權(quán)重的隊列)
- 列出游戲中前100名高分的選手
- 利用區(qū)間取值和排序的功能竹勉,可以用做分頁
附上一個Redis命令在線操作的地址 Redis命令在線操作地址
如果這篇文章對你有幫助,請點個贊哈娄琉,感謝