Redis簡介

一、Redis安裝

1:去官網下載最新的版本:http://redis.io/download

2:解壓后,進入解壓好的文件夾

3:redis的安裝非常簡單,因為已經有現成的Makefile文件,所以直接先make,然后make install就

可以了

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

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

(2)redis-check-aof:用于修復出問題的AOF文件

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

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

(5)redis-sentinel:Redis集群的管理工具(哨兵機制實現)

(6)redis-server:Redis服務器啟動程序

5:啟動Redis的時候,只有一個參數,就是指定配置文件redis.conf的路徑。redis.conf在解壓的文

件夾里面有,復制一個出來,按需修改即可,也可--port來指定端口

6:連接Redis并操作,使用redis-cli,如果有多個實例,可以redis-cli -h 服務器ip -p 端口

7:關閉Redis,redis-cli shutdown,如果有多個實例,可以指定端口來關閉:redis-cli -p 6379

shutdown

Redis的服務器程序采用的是單進程模型來處理客戶端的請求。對讀寫等事件的響應

是通過對epoll函數的包裝來做到的。

Redis的實際處理速度完全依靠主進程的執行效率,假如同時有多個客戶端并發訪問

服務器,則服務器處理能力在一定情況下將會下降。假如你要提升服務器的并發能力,那

么可以采用在單臺機器部署多個redis進程的方式。

二、Redis的數據存儲與結構

Redis的數據庫簡介:

1:Redis每個數據庫對外都是以從0開始遞增的數字來命名,默認16個數據庫,默認使用0號數

? ? 據庫,可以使用Select 數字來選擇要使用的數據庫

2:使用Dbsize可以查看當前數據庫的key的數量

3:可以在多個數據庫間移動數據,使用move key 目的數據庫編號 就可以了

4:使用flushdb可以清除某個數據庫的數據

5:Redis不支持自定義數據庫名字

6:Redis不支持為每個數據庫設置不同的訪問密碼

7:多個數據庫之間并不是完全獨立的,FlushAll可以清空全部的數據

8:Redis的數據庫更像是一個命名空間

Redis的持久化方式:

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

1:RDB是在不同的時間點,將Redis某一時刻的數據生成快照并存儲到磁盤上

2:AOF是只允許追加不允許改寫的文件,是將Redis執行過的所有寫指令記錄下來,在下次

Redis重新啟動時,只要把這些寫指令從前到后再重復執行一遍,就可以實現數據恢復了

3:RDB和AOF兩種方式可以同時使用,在這種情況下,如果Redis重啟的話,則會優先采用AOF

方式來進行數據恢復,這是因為AOF方式的數據恢復完整度更高

4:可以關閉RDB和AOF,這樣的話,Redis將變成一個純內存數據庫,就像Memcache一樣

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

RDB

RDB方式,Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到

一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。

整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能

如果需要進行大規模數據的恢復,且對于數據恢復的完整性不是非常敏感,那RDB方

式要比AOF方式更加的高效。RDB的缺點是最后一次持久化后的數據可能丟失。

RDB的問題

1:fork一個進程時,內存的數據也被復制了,即內存會是原來的兩倍

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

據。如果數據量大的話,而且寫操作比較多,必然會引起大量的磁盤io操作,可

能會嚴重影響性能。

Redis的數據結構

1:String:字符串,可以存儲String、Integer、Float型的數據?

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

3:Set:字符串Set,無序不可重復,是通過HashTable實現的

4:Hash:按Hash方式來存放字符串,底層是HashTable/ZipList,數據量小使用ZipList

5:ZSet:字符串Set,有序且不可重復,根據Score來排序。底層使用散列表和跳躍

? ? 表來實現,所以讀取中間部分數據也很快

三、Redis的常用命令

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

(1)? 匹配一個字符

(2)* 匹配任意個字符

(3)[] 匹配中括號內的任一字符,可以用-來表示一個范圍

(4)\x 匹配字符x,用于轉義符號

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

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

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

4:type:獲得鍵值的數據類型,格式是type key

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

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

String類型的操作命令

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

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

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

4:incrbyfloat:遞增和遞減浮點數值,格式是incrbyfloat key值 正負數值

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

6:getrange:獲取指定索引范圍內的值,格式是getrange key值 起始索引 結束索引

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

8:strlen:返回鍵值的長度,格式是strlen key值

9:mget:同時獲得多個鍵的值,格式是mget 多個key值

10:mset:同時設置多個鍵值對,格式是mset key值 value , key和value可以多對

11:bitcount:獲取范圍內為1的二進制位數,格式是bitcount key值 [start end]

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

13:setbit:設置指定位置的二進制位的值,格式是setbit key值 offset索引 值

14:bitop:對多個二進制值進行位操作,格式是bitop 操作 目的key key值1 key值2,操作有and、or、xor、not,key值可以是多個

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

List類型的操作命令

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

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

3:lindex:獲取指定索引的值,格式是 lindex list的key 索引號

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

5:llen:獲取元素個數,格式是llen list的key

6:lrem:刪除元素,格式是lrem list的key 數量 item項的值,數量可正負,表示從左或右刪除

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

8:blpop/brpop:彈出值,格式是blpop list的key值 過期時間,key可以是多個,如果沒有值,會一值等待有值,直到過期

對Set類型的操作命令

1:sadd:添加元素,格式是 sadd set的key item項的值,item項可以多個

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

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

4:srem:刪除元素,格式是 srem set的key item項的值

5:scard:獲取集合中元素個數,格式是scard set的key

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

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

8:smove:移動元素,格式是smove 源set的key 目的set的key item項的值

9:sdiff:差集,返回在第一個set里面而不在后面任何一個set里面的項,格式是sdiff set的key 用來比較的多個set的key

10:sdiffstore:差集并保留結果,格式是命令 存放結果的set的key set的key 用來比較的多個set的key

11:sinter:交集,返回多個set里面都有的項,格式是sinter 多個set的key

12:sinterstore:交集并保留結果,格式是sinter 存放結果的set的key 多個set的key

13:sunion:并集,格式是sunion 多個set的key

14:sunionstore:并集并保留結果,格式是sunionstore 存放結果的set的key 多個set的key

Hash類型的操作命令

1:hset:設置值,格式是hset Hash的Key 項的key 項的值

2:hmset:同時設置多對值,格式是hmset Hash的Key 項的key 項的值,項的key和值可多對

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

4:hget:獲取值,格式是hget Hash的Key 項的key

5:hmget:同時獲取多個值,格式是hmget Hash的Key 項的key,項的key可以是多個

6:hdel:刪除某個項,格式是hdel Hash的Key 項的key

7:hlen:獲取Key里面的鍵值對數量,格式是hlen Hash的Key

8:hexists:判斷鍵值是否存在,格式是hexists Hash的Key 項的key

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

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

11:hincrby:增減整數數字,格式是hincrby Hash的Key 項的key 正負整數

12:hincrbyfloat:增減Float數值,格式是hincrbyfloat Hash的Key 項的key 正負float

13:hsetnx: 不存在則賦值,存在時什么都不做, 格式是hsetnx Hash的Key 項的key 項的值

ZSet類型的操作命令

1:zadd:添加元素,格式是zadd zset的key score值 項的值,Score和項可以是多對,score可以是整數,也可以是浮點數,還可以是+inf表示正無窮大,-inf表示負無窮大

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

3:zrangebyscore:獲取分數區間內的元素,格式是zrangebyscore zset的key 起始score 終止score(withscores),默認是包含端點值的,如果加上“(”表示不包含;后面還可以加上limit來限制

4:zrem:刪除元素,格式是zrem zset的key 項的值,項的值可以是多個

5:zcard:獲取集合中元素個數,格式是zcard zset的key

6:zincrby:增減元素的Score,格式是zincrby zset的key 正負數字 項的值

7:zcount:獲取分數區間內元素個數,格式是zcount zset的key 起始score 終止score

8:zrank:獲取項在zset中的索引,格式是zrank zset的key 項的值

9:zscore:獲取元素的分數,格式是zscore zset的key 項的值,返回項在zset中的score

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

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

12:zrevrangebyscore:獲取分數區間內的元素,格式是zrevrangebyscore zset的key 終止score 起始score (withscores)

13:zremrangebyrank:刪除索引區間內的元素,格式是zremrangebyrank zset的key 起始索引 終止索引

14:zremrangebyscore:刪除分數區間內的元素,格式是命令 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]

處理過期keys的命令

1:expire:設置過期時間,格式是expire key值 秒數

2:expireat:設置過期時間,格式是expireat key值 到秒的時間戳

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

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

? ? 者getset命令為鍵賦值的時候,也會清除鍵的過期時間

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

6:pexpire:設置過期時間,格式是pexpire key值 毫秒數

7:pexpireat:設置過期時間,格式是pexpireat key值 到毫秒的時間戳

四、Redis數據結構的應用場景

最簡單的 String ,可以作為 Memcached 替代品,用作緩存系統

使用 SetNx 可以實現簡單的分布式鎖

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

使用 SUBSCRIBE PUBLISH 可以實現發布/訂閱模型

對數據進行實時分析,如可以累加統計等

使用 Set 做去重的計數統計

使用 SortedSet 可以做排行榜等排序場景

使用 getbit setbit bitcount 做大數據量的去重統計,在允許誤差的情況下可使用HyperLogLog

使用 GEO 可以實現位置定位、附近的人

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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