1. 程式人生 > >Redis-五大資料型別&設定

Redis-五大資料型別&設定

Redis的五大資料

➢ keys  * 

• 查詢當前庫的所有鍵

➢ exists  <key>

 • 判斷某個鍵是否存在

➢ type  <key>  

 • 檢視鍵的型別

➢ del  <key>

 • 刪除某個鍵

➢ expire   <key>   <seconds> 

• 為鍵值設定過期時間,單位秒。

、➢ ttl   <key> 

• 檢視還有多少秒過期,-1表示永不過期,-2表示已過期

➢ dbsize 

• 檢視當前資料庫的key的數量

需要慎用的兩個命令:

因為在linux操作行中,redis中只要登入進去了,下面的操作是可以執行的

➢ flushdb 

• 清空當前庫

➢ flushall 

• 通殺全部庫

三、String

➢String是Redis最基本的型別,你可以理解成與 Memcached一模一樣的型別,一個key對應一個value。
➢String型別是二進位制安全的。意味著Redis的string可以 包含任何資料。比如jpg圖片或者序列化的物件 。

➢String型別是Redis最基本的資料型別,一個Redis中字 符串value最多可以是512M

➢ get   <key> 

• 查詢對應鍵值 

➢ set   <key>  <value>

 • 新增鍵值對

➢ append  <key>  <value> 

• 將給定的<value> 追加到原值的末尾

➢ strlen <key> 

• 獲得值的長度

➢ setnx  <key>  <value>

• 只有在 key 不存在時設定 key 的值 

➢ incr <key>

 • 將 key 中儲存的數字值增1 

• 只能對數字值操作,如果為空,新增值為1 

➢ decr <key> 

• 將 key 中儲存的數字值減1 

• 只能對數字值操作,如果為空,新增值為-1

➢ incrby / decrby <key>  <步長> 

• 將 key 中儲存的數字值增減。自定義步長

➢ 原子性

• 所謂原子操作是指不會被執行緒排程機制 打斷的操作;這種操作一旦開始,就一 直執行到結束,中間不會有任何 context switch (切換到另一個執行緒)。

(1) 在單執行緒中, 能夠在單條指令中完成的操作都可以認為是" 原子操作", 因為中斷只能發生於指令之間。 (2)在多執行緒中,不能被其它程序(執行緒)打斷的操作就叫原子操作。

Redis單命令的原子性主要得益於Redis的單執行緒

➢ mset <key1>  <value1>  <key2>  <value2>  ..... 

• 同時設定一個或多個 key-value對 

➢ mget <key1>   <key2>   <key3> ..... 

• 同時獲取一個或多個 value  

➢ msetnx <key1>  <value1>  <key2>  <value2>  ..... 

• 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。

➢ getrange <key>  <起始位置>  <結束位置> 

• 獲得值的範圍,類似java中的substring

➢ setrange <key>   <起始位置>   <value> 

• 用 <value> 覆寫<key> 所儲存的字串值,從<起 始位置>開始

➢ setex <key>  <過期時間>   <value>

• 設定鍵值的同時,設定過期時間,單位秒。

➢ getset <key>  <value>

• 以新換舊,設定了新值同時獲得就值

List 

➢ 單鍵多值 

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

 ➢ 它的底層實際是個雙向連結串列,對兩端的操作效能很高,通過索引下標的操 作中間的節點效能會較差。

➢ lpush/rpush <key>  <value1>  <value2>  <value3> ....

 • 從左邊/右邊插入一個或多個值。 ➢ lpop/rpop <key> 

• 從左邊/右邊吐出一個值。

 • 值在鍵在,值光鍵亡。

➢ rpoplpush <key1>  <key2>

• 從<key1>列表右邊吐出一個值,插到<key2>列表左邊。

➢ lrange <key> <start> <stop>

• 按照索引下標獲得元素(從左到右)

➢ lindex <key> <index>

• 按照索引下標獲得元素(從左到右)

➢ llen <key>

• 獲得列表長度

➢ linsert <key>  before <value>  <newvalue> 

• 在<value>的後面插入<newvalue> 插入值

➢ lrem <key> <n>  <value> 

• 從左邊刪除n個value(從左到右)

--Set

➢Redis set對外提供的功能與list類似是一個列表的功能, 特殊之處在於set是可以自動排重的,當你需要儲存一個 列表資料,又不希望出現重複資料時,set是一個很好的 選擇,並且set提供了判斷某個成員是否在一個set集合內 的重要介面,這個也是list所不能提供的。

➢Redis的Set是string型別的無序集合。

它底層其實是一 個value為null的hash表,所以新增,刪除,查詢的複雜 度都是O(1)。

➢ sadd <key>  <value1>  <value2> ..... 

• 將一個或多個 member 元素加入到集合 key 當中,已 經存在於集合的 member 元素將被忽略

➢ smembers <key>

 • 取出該集合的所有值

➢ sismember <key>  <value> 

• 判斷集合<key>是否為含有該<value>值,有返回1, 沒有返回0

➢ scard <key>

• 返回該集合的元素個數。

➢ srem <key> <value1> <value2> ....

• 刪除集合中的某個元素。

➢ spop <key>  

• 隨機從該集合中吐出一個值。

➢ srandmember <key> <n>

• 隨機從該集合中取出n個值。 • 不會從集合中刪除

➢ sunion <key1> <key2>  

• 返回兩個集合的 並集元素。

➢ sinter <key1> <key2>  

• 返回兩個集合的交集元素。

➢ sdiff <key1> <key2>  

• 返回兩個集合的差集元素。

-->hash

➢ Redis hash 是一個鍵值對集合。
➢ Redis hash是一個string型別的field和value的對映表,
hash特別適合用於儲存物件。

➢ 類似Java裡面的Map<String,Object>

➢ hset <key>  <field>  <value>

• 給<key>集合中的 <field>鍵賦值<value>

➢ hget <key1>  <field>   

• 從<key1>集合<field> 取出 value

➢ hmset <key1>  <field1> <value1> <field2> <value2>...   

• 批量設定hash的值

 hexists key  <field>
• 檢視雜湊表 key 中,給定域 field 是否存在。

➢ hkeys <key>   

➢ hvals <key>   

➢ hsetnx <key>  <field> <value>

• 為雜湊表 key 中的域 field 的值加上增量 increment
• 列出該hash集合的所有field
• 列出該hash集合的所有value

➢ hincrby <key> <field>  <increment>

• 將雜湊表 key 中的域 field 的值設定為 value ,當且僅當域 field 不存在 .

-->zset  (sorted set)

Redis有序集合zset與普通集合set非常相似,是 一個沒有重複元素的字串集合。不同之處是有序集合 的沒有成員都關聯了一個評分(score) ,這個評分 (score)被用來按照從最低分到最高分的方式排序集 閤中的成員。集合的成員是唯一的,但是評分可以是重 復了 。 因為元素是有序的, 所以你也可以很快的根據評分 (score)或者次序(position)來獲取一個範圍的元 素。訪問有序集合的中間元素也是非常快的,因此你能夠 使用有序集合作為一個沒有重複成員的智慧列表。 

➢ zadd  <key> <score1> <value1>  <score2> <value2>...

• 將一個或多個 member 元素及其 score 值加入到有序集 key 當中。

➢ zrange <key>  <start> <stop>  [WITHSCORES]   

➢ zrangebyscore key min max [withscores] [limit offset count]

• 返回有序集 key 中,下標在<start> <stop>之間的元素 • 帶WITHSCORES,可以讓分數一起和值返回到結果集。
• 返回有序集 key 中,所有 score 值介於 min 和 max 之間 (包括等於 min 或 max )的成員。有序整合員按 score 值遞 增(從小到大)次序排列。

➢ zrevrangebyscore key max min [withscores] [limit offset count]

• 同上,改為從大到小排列。

➢ zincrby <key> <increment> <value>

• 為元素的score加上增量

➢ zrem <key>  <value>  

• 刪除該集合下,指定值的元素

➢ zcount <key>  <min>  <max> 

• 統計該集合,分數區間內的元素個數

➢ zrank <key>  <value> 

• 返回該值在集合中的排名,從0開始

-->Redis相關配置

➢ 計量單位說明

➢ 大小寫不敏感

➢include


類似jsp中的include,多例項的情況可以把公用的配 置檔案提取出來

➢ip地址的繫結(bind)

預設情況bind=127.0.0.1只能接受本機的訪問請求
不寫的情況下,無限制接受任何ip地址的訪問
生產環境肯定要寫你應用伺服器的地址

如果開啟了protected-mode,那麼在沒有設定bind ip且 沒有設密碼的情況下,Redis只允許接受本機的響應

➢tcp-backlog

可以理解是一個請求到達後至到接受程序處理前的佇列
backlog佇列總和=未完成三次握手佇列 +  已經完成 三次握手佇列

高併發環境tcp-backlog 設定值跟超時時限內的Redis 吞吐量決定

➢timeout

 一個空閒的客戶端維持多少秒會關閉,0為永不關閉

➢TCP keepalive

 對訪問客戶端的一種心跳檢測,每個n秒檢測一次。

官方推薦設為60秒。

➢daemonize

是否為後臺程序

➢ pidfile

存放pid檔案的位置,每個例項會產生一個不同的pid檔案

➢ log level 

四個級別根據使用階段來選擇,生產環境選擇notice 或者 warning

➢ logfile 

日誌檔名稱

➢ syslog

是否將Redis日誌輸送到linux系統日誌服務中

➢ syslog-ident

日誌的標誌 

➢ syslog-facility 

輸出日誌的裝置

➢ database 

設定庫的數量 預設16

➢ security

• 在命令列中設定密碼


➢ maxclient

• 最大客戶端連線數

➢ maxmemory 

• 設定Redis可以使用的記憶體量。一旦到達記憶體使用上限,

Redis將會試圖移除內部資料,移除規則可以通過
maxmemory-policy來指定。如果Redis無法根據移除規則來

移除記憶體中的資料,或者設定了“不允許移除”, 

• 那麼Redis則會針對那些需要申請記憶體的指令返回錯誤資訊,

比如SET、LPUSH等。

➢ Maxmemory-policy

(1)volatile-lru:使用LRU演算法移除key,只對設定了過期時間的

(2)allkeys-lru:使用LRU演算法移除key
(3)volatile-random:在過期集合中移除隨機的key,只對設定了
過期時間的鍵
(4)allkeys-random:移除隨機的key
(5)volatile-ttl:移除那些TTL值最小的key,即那些最近要過期
的key

(6)noeviction:不進行移除。針對寫操作,只是返回錯誤資訊

➢ Maxmemory-samples

• 設定樣本數量,LRU演算法和最小TTL演算法都並非是精確的算 法,而是估算值,所以你可以設定樣本的大小。 

• 一般設定3到7的數字,數值越小樣本越不準確,但是效能 消耗也越小