Redis 數據庫
一、 概要
1. 特點
- 用于抽象數據類型的 DSL
- 內存存儲
- 基礎數據結構 API
- 編碼風格
- 避免代碼復雜
- 兩層 API
- 以優化為樂
2. 數據類型
- 鍵值對(字符串->字符串)
- 哈希
- 列表(鏈表)
- 集合:差并交
- 有序集合 = 列表 + 集合
- 位圖(嚴格上說不算是一種數據結構)
- HyperLogLogs 一種概率數據結構
3. 底層數據結構
- ziplist 壓縮列表(整數 + 字符串)
- hashtable 哈希表
- skiplist 跳表
- 整數集合
- 字符串
- 鏈表
4. 鍵過期策略
(1)noeviction policy
默認策略:永不過期
(2) LRU
- 前提:存在已設置過期時間的鍵,
- volatile-lru 刪除最近最少使用的鍵
- allkeys-lru 刪除全部鍵
- 注意:不準確,默認選取 5個鍵作為樣本,刪除最少使用的一個
(3)random
- volatile-random
- allkeys-random
二、五種數據類型
0. 基本命令
- 獲得匹配鍵名
KEYS pattern
- ? --匹配一個字符
- * --匹配任意個字符
- [] --匹配括號間的任一字符,‘-’ 表示一個范圍
- x --匹配字符 x (特殊字符需要用 轉義)
- 判斷鍵存在
EXISTS key
- 刪除
DEL key [key ...]
- 獲取類型
TYPE key
1. 字符串
- 獲取/設置
GET key --獲取鍵值
SET key value --設置鍵值MGET key [key ...] --獲取多個鍵值
MSET key [key ...] --設置多個鍵值
- 字符串
STRLEN key --長度
**APPEND key value** -- 追加
- 整型
INCR key --自增 1
DECR key --自減 1
INCRBY key increment --自增某個整數
DECRBY key decrement --自減某個整數
- 浮點
INCRBYFLOAT key increment --自增某個數
DECRBYFLOAT key decrement --自減某個數
- 位操作
GETBIT key offset --獲取某二進制位的值
SETBIT key offset value --設置某二進制位的值BITCOUNT key [start] [end]** --統計【一定范圍內】二進制位為 1 的個數
BITOP operation destkey key [key ...] --位運算:operation可取值【OR、AND、XOR、NOT】BITPOS key 1|0 [start end]** --獲取鍵值第一個二進制位為 1 的偏移量
2. 散列
- 基本
HSET key field value
HGET key fieldHMGET key field value [field value ...]
HMSET key field value [field value ...]HGETALL key --獲取全部鍵值HKEYS key --獲取字段名HVALS key --獲取字段值HLEN key --統計字段數量HDEL key field [field ...] --刪除字段
- 檢測存在
HEXISTS key field [field ...]HSETNX key field value --值不存在時賦值
- 運算
HINCRBY key field increment --為整型鍵值加 1
3. 列表
- 添加
LPUSH key value [value ...] --左添
RPUSH key value [value ...] --右添LINSERT key BEFORE|AFTER pivot value --在 pivot 前|后插入元素LSET key index value --設置指定索引的值
- 獲取
LINDEX key index --獲取指定索引的值LRANGE key start stop --獲取部分(通過索引)
- 刪除
LPOP key --左彈出
RPOP key --右彈出LREM key count value --刪除前 count 個值為 value 的元素(count 為負則從后面數起)LTRIM key start end --刪除指定索引范圍之內的元素
- 轉移
RPOPLPUSH source destination --右彈出并左添到另一個列表
4. 集合
- 添加
SADD key member [member ...]
- 刪除
SREM key member [member ...]SPOP key --隨機彈出一個元素
- 獲取
SMEMBERS keySRANDMEMBER key [count] --取數不大于集合元素數量時,隨機取 count 不重復個元素(count 為負時可能取得重復元素)
- 檢測存在
SISMEMER key [value ...]
- 統計
SCARD key
- 運算
SDIFF key [key ...] --差集
SINTER key [key ...] --交集
SUNION key [key ...] --并集
- 運算并存儲
SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]
5. 有序集合
- 增或改
ZADD key score member [score member ...]
- 獲取
ZSCORE key memberZRANGE key start stop [WITHSCORES] --取指定范圍元素【帶值】
ZREVRANGE key start stop [WITHSCORES] --按分數排序,取指定范圍元素【帶值】ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] --取指定范圍元素【帶值】
- 運算
ZINCRBY key increment member --自增 1
- 數量
ZCARD keyZCOUNT key min max --指定范圍內
- 刪除
ZREM key member [member ...]ZREMRANGEBYRANK key start stopZREMRANGEBYSCORE key min max
- 排名
ZRANK key member --降序ZREVRANK key member --升序
6. 位圖
- 提供實時分析
- 更高效地利用存儲空間
setbit key index valuegetbit key indexbitcount key --統計
7. HyperLogLogs
pfadd key member [member...] --設置pfcount key --統計已被設置的個數
三、事務
- 生命周期
MULTI --開始// .... 其他指令EXEC --執行
- 錯誤顯示
ERRORCOMAND key
- 監控
WATCH key --監控鍵值被修改后不執行下一條命令UNWATCH --取消監控
- 生命周期
EXPIRE key seconds --定義(更新)生存時間TTL key --查詢剩余生存時間PERSIST key --取消過期時間設置(臨時->永久)EXPIREAT key UNIXTIME --時間為秒PEXPIREAT key UNIXTIME --時間為毫秒
- 排序
SORT key [BY field] [ASC|DESC] [LIMIT offset count]
(LIMIT:跳過前 offset 個元素,取 count 個元素)6SORT key ALPHA --按字典
四、其他
- 安全配置 redis.conf / redis.cnf
- bind 127.0.0.1 設置只允許本機訪問
- requirepass XXXXXXXXX 設置密碼
- AUTH XXXXXXXX 發送密碼
注意:(敲黑板啦!)
- 索引為負時,從鍵值末尾數起。如 index = -3,表示倒數第 3 個位置。