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 中儲存的數字值增減。自定義步長
➢ 原子性
(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>
• 設定鍵值的同時,設定過期時間,單位秒。
• 以新換舊,設定了新值同時獲得就值
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的數字,數值越小樣本越不準確,但是效能 消耗也越小