Redis簡(jiǎn)介

一、Redis安裝

1:去官網(wǎng)下載最新的版本:http://redis.io/download

2:解壓后,進(jìn)入解壓好的文件夾

3:redis的安裝非常簡(jiǎn)單,因?yàn)橐呀?jīng)有現(xiàn)成的Makefile文件,所以直接先make,然后make install就

可以了

4:安裝的位置在/usr/local/bin ,有:

(1)redis-benchmark:性能測(cè)試工具,測(cè)試Redis在你的系統(tǒng)及配置下的讀寫性能

(2)redis-check-aof:用于修復(fù)出問(wèn)題的AOF文件

(3)redis-check-dump:用于修復(fù)出問(wèn)題的dump.rdb文件

(4)redis-cli:Redis命令行操作工具

(5)redis-sentinel:Redis集群的管理工具(哨兵機(jī)制實(shí)現(xiàn))

(6)redis-server:Redis服務(wù)器啟動(dòng)程序

5:?jiǎn)?dòng)Redis的時(shí)候,只有一個(gè)參數(shù),就是指定配置文件redis.conf的路徑。redis.conf在解壓的文

件夾里面有,復(fù)制一個(gè)出來(lái),按需修改即可,也可--port來(lái)指定端口

6:連接Redis并操作,使用redis-cli,如果有多個(gè)實(shí)例,可以redis-cli -h 服務(wù)器ip -p 端口

7:關(guān)閉Redis,redis-cli shutdown,如果有多個(gè)實(shí)例,可以指定端口來(lái)關(guān)閉:redis-cli -p 6379

shutdown

Redis的服務(wù)器程序采用的是單進(jìn)程模型來(lái)處理客戶端的請(qǐng)求。對(duì)讀寫等事件的響應(yīng)

是通過(guò)對(duì)epoll函數(shù)的包裝來(lái)做到的。

Redis的實(shí)際處理速度完全依靠主進(jìn)程的執(zhí)行效率,假如同時(shí)有多個(gè)客戶端并發(fā)訪問(wèn)

服務(wù)器,則服務(wù)器處理能力在一定情況下將會(huì)下降。假如你要提升服務(wù)器的并發(fā)能力,那

么可以采用在單臺(tái)機(jī)器部署多個(gè)redis進(jìn)程的方式。

二、Redis的數(shù)據(jù)存儲(chǔ)與結(jié)構(gòu)

Redis的數(shù)據(jù)庫(kù)簡(jiǎn)介:

1:Redis每個(gè)數(shù)據(jù)庫(kù)對(duì)外都是以從0開始遞增的數(shù)字來(lái)命名,默認(rèn)16個(gè)數(shù)據(jù)庫(kù),默認(rèn)使用0號(hào)數(shù)

? ? 據(jù)庫(kù),可以使用Select 數(shù)字來(lái)選擇要使用的數(shù)據(jù)庫(kù)

2:使用Dbsize可以查看當(dāng)前數(shù)據(jù)庫(kù)的key的數(shù)量

3:可以在多個(gè)數(shù)據(jù)庫(kù)間移動(dòng)數(shù)據(jù),使用move key 目的數(shù)據(jù)庫(kù)編號(hào) 就可以了

4:使用flushdb可以清除某個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)

5:Redis不支持自定義數(shù)據(jù)庫(kù)名字

6:Redis不支持為每個(gè)數(shù)據(jù)庫(kù)設(shè)置不同的訪問(wèn)密碼

7:多個(gè)數(shù)據(jù)庫(kù)之間并不是完全獨(dú)立的,F(xiàn)lushAll可以清空全部的數(shù)據(jù)

8:Redis的數(shù)據(jù)庫(kù)更像是一個(gè)命名空間

Redis的持久化方式:

Redis持久化分成兩種方式:RDB(Redis DataBase)和AOF(Append Only File)

1:RDB是在不同的時(shí)間點(diǎn),將Redis某一時(shí)刻的數(shù)據(jù)生成快照并存儲(chǔ)到磁盤上

2:AOF是只允許追加不允許改寫的文件,是將Redis執(zhí)行過(guò)的所有寫指令記錄下來(lái),在下次

Redis重新啟動(dòng)時(shí),只要把這些寫指令從前到后再重復(fù)執(zhí)行一遍,就可以實(shí)現(xiàn)數(shù)據(jù)恢復(fù)了

3:RDB和AOF兩種方式可以同時(shí)使用,在這種情況下,如果Redis重啟的話,則會(huì)優(yōu)先采用AOF

方式來(lái)進(jìn)行數(shù)據(jù)恢復(fù),這是因?yàn)锳OF方式的數(shù)據(jù)恢復(fù)完整度更高

4:可以關(guān)閉RDB和AOF,這樣的話,Redis將變成一個(gè)純內(nèi)存數(shù)據(jù)庫(kù),就像Memcache一樣

5:通過(guò)配置redis.conf中的appendonly為yes就可以打開AOF功能

RDB

RDB方式,Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來(lái)進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入到

一個(gè)臨時(shí)文件中,待持久化過(guò)程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。

整個(gè)過(guò)程中,主進(jìn)程是不進(jìn)行任何IO操作的,這就確保了極高的性能

如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù),且對(duì)于數(shù)據(jù)恢復(fù)的完整性不是非常敏感,那RDB方

式要比AOF方式更加的高效。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。

RDB的問(wèn)題

1:fork一個(gè)進(jìn)程時(shí),內(nèi)存的數(shù)據(jù)也被復(fù)制了,即內(nèi)存會(huì)是原來(lái)的兩倍

2:每次快照持久化都是將內(nèi)存數(shù)據(jù)完整寫入到磁盤一次,并不是增量的只同步臟數(shù)

據(jù)。如果數(shù)據(jù)量大的話,而且寫操作比較多,必然會(huì)引起大量的磁盤io操作,可

能會(huì)嚴(yán)重影響性能。

Redis的數(shù)據(jù)結(jié)構(gòu)

1:String:字符串,可以存儲(chǔ)String、Integer、Float型的數(shù)據(jù)?

2:List:字符串List,底層實(shí)現(xiàn)是鏈表(linkedList/zipList),增刪快,查找慢

3:Set:字符串Set,無(wú)序不可重復(fù),是通過(guò)HashTable實(shí)現(xiàn)的

4:Hash:按Hash方式來(lái)存放字符串,底層是HashTable/ZipList,數(shù)據(jù)量小使用ZipList

5:ZSet:字符串Set,有序且不可重復(fù),根據(jù)Score來(lái)排序。底層使用散列表和跳躍

? ? 表來(lái)實(shí)現(xiàn),所以讀取中間部分?jǐn)?shù)據(jù)也很快

三、Redis的常用命令

1:Keys:獲得符合規(guī)則的鍵名列表,格式是keys [pattern]? 支持glob風(fēng)格通配符格式:keys act*

(1)? 匹配一個(gè)字符

(2)* 匹配任意個(gè)字符

(3)[] 匹配中括號(hào)內(nèi)的任一字符,可以用-來(lái)表示一個(gè)范圍

(4)\x 匹配字符x,用于轉(zhuǎn)義符號(hào)

2:exists:判斷鍵值是否存在,格式是exists key

3:del:刪除key,格式是del key。

小技巧:Del命令不支持通配符,可以結(jié)合linux管道和xargs命令來(lái)自定義刪除,示例如下:redis-cli keys k* | xargs redis-cli del

4:type:獲得鍵值的數(shù)據(jù)類型,格式是type key

5:rename:改名,格式是rename oldKey newKey

6:renamenx:如果不存在則改名,格式是rename oldKey newKey

String類型的操作命令

1:get、set、del:獲取key的值、設(shè)置key和值、刪除key

2:incr、decr:遞增和遞減整數(shù)值,格式是incr key值

3:incrby、decrby:遞增和遞減整數(shù)值,可指定增減的數(shù)值,格式是incrby key值 正負(fù)數(shù)值

4:incrbyfloat:遞增和遞減浮點(diǎn)數(shù)值,格式是incrbyfloat key值 正負(fù)數(shù)值

5:append:在尾部追加值,格式是append key值 追加的值

6:getrange:獲取指定索引范圍內(nèi)的值,格式是getrange key值 起始索引 結(jié)束索引

7:setrange:從索引位置開始設(shè)置后面的值,格式是setrange key值 offset索引 值

8:strlen:返回鍵值的長(zhǎng)度,格式是strlen key值

9:mget:同時(shí)獲得多個(gè)鍵的值,格式是mget 多個(gè)key值

10:mset:同時(shí)設(shè)置多個(gè)鍵值對(duì),格式是mset key值 value , key和value可以多對(duì)

11:bitcount:獲取范圍內(nèi)為1的二進(jìn)制位數(shù),格式是bitcount key值 [start end]

12:getbit:獲取指定位置的二進(jìn)制位的值,格式是getbit key值 offset索引

13:setbit:設(shè)置指定位置的二進(jìn)制位的值,格式是setbit key值 offset索引 值

14:bitop:對(duì)多個(gè)二進(jìn)制值進(jìn)行位操作,格式是bitop 操作 目的key key值1 key值2,操作有and、or、xor、not,key值可以是多個(gè)

15:getset:原子的設(shè)置key的值,并返回key的舊值. 格式:getset key value

List類型的操作命令

1:lpush/rpush:將制定內(nèi)容添加到list 開頭/末尾 rpush key1 "last" 將last添加到列表末尾?

2:lrange:按索引范圍獲取值,格式是 lrange list的key 起始索引 終止索引,-1表示最后一個(gè)索引

3:lindex:獲取指定索引的值,格式是 lindex list的key 索引號(hào)

4:lpop/rpop:取出頭/尾部數(shù)據(jù)并刪除,格式是 lpop list的key

5:llen:獲取元素個(gè)數(shù),格式是llen list的key

6:lrem:刪除元素,格式是lrem list的key 數(shù)量 item項(xiàng)的值,數(shù)量可正負(fù),表示從左或右刪除

7:ltrim:保留指定索引區(qū)間的元素,格式是ltrim list的key 起始索引 結(jié)束索引

8:blpop/brpop:彈出值,格式是blpop list的key值 過(guò)期時(shí)間,key可以是多個(gè),如果沒(méi)有值,會(huì)一值等待有值,直到過(guò)期

對(duì)Set類型的操作命令

1:sadd:添加元素,格式是 sadd set的key item項(xiàng)的值,item項(xiàng)可以多個(gè)

2:smembers:獲取集合中所有元素,格式是 smembers set的key

3:sismember:判斷元素是否在集合眾,格式是 sismember set的key item項(xiàng)的值

4:srem:刪除元素,格式是 srem set的key item項(xiàng)的值

5:scard:獲取集合中元素個(gè)數(shù),格式是scard set的key

6:srandmember:隨機(jī)獲取集合中的元素,格式是srandmember set的key [數(shù)量],數(shù)量為正的時(shí)候,會(huì)隨機(jī)獲取這么多個(gè)不重復(fù)的元素;如果數(shù)量大于集合元素個(gè)數(shù),返回全部;如果數(shù)量為負(fù),會(huì)隨機(jī)獲得這么多個(gè)元素,可能有重復(fù)

7:spop:彈出元素,格式是spop set的key

8:smove:移動(dòng)元素,格式是smove 源set的key 目的set的key item項(xiàng)的值

9:sdiff:差集,返回在第一個(gè)set里面而不在后面任何一個(gè)set里面的項(xiàng),格式是sdiff set的key 用來(lái)比較的多個(gè)set的key

10:sdiffstore:差集并保留結(jié)果,格式是命令 存放結(jié)果的set的key set的key 用來(lái)比較的多個(gè)set的key

11:sinter:交集,返回多個(gè)set里面都有的項(xiàng),格式是sinter 多個(gè)set的key

12:sinterstore:交集并保留結(jié)果,格式是sinter 存放結(jié)果的set的key 多個(gè)set的key

13:sunion:并集,格式是sunion 多個(gè)set的key

14:sunionstore:并集并保留結(jié)果,格式是sunionstore 存放結(jié)果的set的key 多個(gè)set的key

Hash類型的操作命令

1:hset:設(shè)置值,格式是hset Hash的Key 項(xiàng)的key 項(xiàng)的值

2:hmset:同時(shí)設(shè)置多對(duì)值,格式是hmset Hash的Key 項(xiàng)的key 項(xiàng)的值,項(xiàng)的key和值可多對(duì)

3:hgetall:獲取該Key下所有的值,格式是hgetall Hash的Key

4:hget:獲取值,格式是hget Hash的Key 項(xiàng)的key

5:hmget:同時(shí)獲取多個(gè)值,格式是hmget Hash的Key 項(xiàng)的key,項(xiàng)的key可以是多個(gè)

6:hdel:刪除某個(gè)項(xiàng),格式是hdel Hash的Key 項(xiàng)的key

7:hlen:獲取Key里面的鍵值對(duì)數(shù)量,格式是hlen Hash的Key

8:hexists:判斷鍵值是否存在,格式是hexists Hash的Key 項(xiàng)的key

9:hkeys:獲取所有Item的key,格式是hkeys Hash的Key

10:hvals:獲取所有Item的值,格式是hvals Hash的Key

11:hincrby:增減整數(shù)數(shù)字,格式是hincrby Hash的Key 項(xiàng)的key 正負(fù)整數(shù)

12:hincrbyfloat:增減Float數(shù)值,格式是hincrbyfloat Hash的Key 項(xiàng)的key 正負(fù)float

13:hsetnx: 不存在則賦值,存在時(shí)什么都不做, 格式是hsetnx Hash的Key 項(xiàng)的key 項(xiàng)的值

ZSet類型的操作命令

1:zadd:添加元素,格式是zadd zset的key score值 項(xiàng)的值,Score和項(xiàng)可以是多對(duì),score可以是整數(shù),也可以是浮點(diǎn)數(shù),還可以是+inf表示正無(wú)窮大,-inf表示負(fù)無(wú)窮大

2:zrange:獲取索引區(qū)間內(nèi)的元素,格式是zrange zset的key 起始索引 終止索引 (withscores)

3:zrangebyscore:獲取分?jǐn)?shù)區(qū)間內(nèi)的元素,格式是zrangebyscore zset的key 起始score 終止score(withscores),默認(rèn)是包含端點(diǎn)值的,如果加上“(”表示不包含;后面還可以加上limit來(lái)限制

4:zrem:刪除元素,格式是zrem zset的key 項(xiàng)的值,項(xiàng)的值可以是多個(gè)

5:zcard:獲取集合中元素個(gè)數(shù),格式是zcard zset的key

6:zincrby:增減元素的Score,格式是zincrby zset的key 正負(fù)數(shù)字 項(xiàng)的值

7:zcount:獲取分?jǐn)?shù)區(qū)間內(nèi)元素個(gè)數(shù),格式是zcount zset的key 起始score 終止score

8:zrank:獲取項(xiàng)在zset中的索引,格式是zrank zset的key 項(xiàng)的值

9:zscore:獲取元素的分?jǐn)?shù),格式是zscore zset的key 項(xiàng)的值,返回項(xiàng)在zset中的score

10:zrevrank:獲取項(xiàng)在zset中倒序的索引,格式是zrevrank zset的key 項(xiàng)的值

11:zrevrange:獲取索引區(qū)間內(nèi)的元素,格式是zrevrange zset的key 起始索引 終止索引 (withscores)

12:zrevrangebyscore:獲取分?jǐn)?shù)區(qū)間內(nèi)的元素,格式是zrevrangebyscore zset的key 終止score 起始score (withscores)

13:zremrangebyrank:刪除索引區(qū)間內(nèi)的元素,格式是zremrangebyrank zset的key 起始索引 終止索引

14:zremrangebyscore:刪除分?jǐn)?shù)區(qū)間內(nèi)的元素,格式是命令 zset的key 起始score 終止score

15:zinterstore:交集,格式是ZINTERSTORE dest-key key-count key [key ...] [WEIGHTS weight

[weight ...]] [AGGREGATE SUM|MIN|MAX]

16:zunionstore:并集,格式是ZUNIONSTORE dest-key key-count key [key ...] [WEIGHTS weight[weight ...]] [AGGREGATE SUM|MIN|MAX]

處理過(guò)期keys的命令

1:expire:設(shè)置過(guò)期時(shí)間,格式是expire key值 秒數(shù)

2:expireat:設(shè)置過(guò)期時(shí)間,格式是expireat key值 到秒的時(shí)間戳

3:ttl:查看還有多少秒過(guò)期,格式是ttl key值,-1表示永不過(guò)期,-2表示已過(guò)期

4:persist:設(shè)置成永不過(guò)期,格式是persist key值,刪除key的過(guò)期設(shè)置;另外使用set或

? ? 者getset命令為鍵賦值的時(shí)候,也會(huì)清除鍵的過(guò)期時(shí)間

5:pttl:查看還有多少毫秒過(guò)期,格式是pttl key值

6:pexpire:設(shè)置過(guò)期時(shí)間,格式是pexpire key值 毫秒數(shù)

7:pexpireat:設(shè)置過(guò)期時(shí)間,格式是pexpireat key值 到毫秒的時(shí)間戳

四、Redis數(shù)據(jù)結(jié)構(gòu)的應(yīng)用場(chǎng)景

最簡(jiǎn)單的 String ,可以作為 Memcached 替代品,用作緩存系統(tǒng)

使用 SetNx 可以實(shí)現(xiàn)簡(jiǎn)單的分布式鎖

使用 list 的 Pop Push 功能可以作為阻塞隊(duì)列/非阻塞隊(duì)列

使用 SUBSCRIBE PUBLISH 可以實(shí)現(xiàn)發(fā)布/訂閱模型

對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析,如可以累加統(tǒng)計(jì)等

使用 Set 做去重的計(jì)數(shù)統(tǒng)計(jì)

使用 SortedSet 可以做排行榜等排序場(chǎng)景

使用 getbit setbit bitcount 做大數(shù)據(jù)量的去重統(tǒng)計(jì),在允許誤差的情況下可使用HyperLogLog

使用 GEO 可以實(shí)現(xiàn)位置定位、附近的人

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Redis簡(jiǎn)介 Redis是一款開源免費(fèi)、高性能的非關(guān)系型數(shù)據(jù)庫(kù) 非關(guān)系型數(shù)據(jù)庫(kù)(Not Only SQL): 簡(jiǎn)...
    Lee_DH閱讀 1,174評(píng)論 1 20
  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis,volde...
    MicoCube閱讀 4,160評(píng)論 2 27
  • 2016年5月24日。此刻我坐在G1248列車上去濰坊。只有20分鐘車程,這次是去浦發(fā)銀行開通信用卡。這是...
    我是奢侈品閱讀 211評(píng)論 0 0
  • 看魍魎之匣第一次接觸到了過(guò)路魔這個(gè)概念。殺意突然降臨又突然離去,一瞬間過(guò)路魔上身導(dǎo)致犯罪,而后恐慌焦灼不相信自...
    abby談天說(shuō)地聊自己閱讀 1,487評(píng)論 0 1
  • 今晚特別投入的讀吸引定律的秘密,心很靜、沉浸其中,字字斟酌,句句體會(huì),發(fā)現(xiàn)第一次讀過(guò)后再次讀時(shí)完全是不同的感受!有...
    劉淑正閱讀 702評(píng)論 7 7

友情鏈接更多精彩內(nèi)容