1. 程式人生 > 其它 >Redis基礎知識

Redis基礎知識

  1. 資料庫說明

    • redis預設有16個庫,預設選中db 0
    • 簡單命令:
      • select 切換資料庫
      • dbsize 檢視資料庫大小
      • flushdb 清除當前資料庫
      • flushall 清除全部資料庫
  2. 記憶體模型

    redis是基於記憶體的,CPU不是redis的效能瓶頸,Redis的效能瓶頸主要在記憶體和網路頻寬,既然可以用單執行緒就用單執行緒實現了。

    1. redis單執行緒為什麼快?

      redis 是將所有的資料全部放在記憶體中的,所以說使用單執行緒去操作效率就是最高的,多執行緒(CPU上下文會切換:耗時的操作!!!),對於記憶體系統來說,如果沒有上下文切換效率就是最高的!多次讀寫都是在一個CPU上的,在記憶體情況下,這個就是最佳的方案!

    2. redis是單執行緒嗎?

      Redis 的單執行緒主要是指 Redis 的網路 IO 和鍵值對讀寫是由一個執行緒來完成的,這也是 Redis 對外 提供鍵值儲存服務的主要流程。但 Redis 的其他功能,比如持久化、非同步刪除、叢集資料同步等,其實是由額外的執行緒執行的。

    3. redis單執行緒如何處理那麼多的併發客戶端連線?

      Redis的IO多路複用:redis利用epoll來實現IO多路複用,將連線資訊和事件放到佇列中,依次放到 檔案事件分派器,事件分派器將事件分發給事件處理器。

      CONFIG GET maxclients # 檢視redis支援的最大連線數
      
  3. 資料型別及常用命令

    1. keys相關

      • keys * 檢視所有的key值
      • set [key] [value] 設定鍵值
      • exists [key] 判斷鍵值是否存在
      • move [key] [db] 移動某個鍵值到其他庫
      • clear 清屏
      • get [key] 獲取鍵值
      • expire [key] [time] 設定key的過期時間,單位為秒
      • ttl [key] 檢視當前key的過期時間
      • type [key] 檢視key的資料型別
    2. String字串

      • set [key] [value] 設定鍵值對
      • append [key] [value] 往後追加字串,沒有會新建
      • strlen [key] 檢視鍵值長度
      • incr [key] 自增1
      • incrby [key] [step] 設定步長自增
      • decr [key] 自減1
      • decrby [key] [step] 設定步長自減
      • getrange [key] [start] [end] 擷取字串
      • setrange [key] [start] [value] 替換指定未知開始的字串
      • setex [key] [expire] [value] 設定值並設定過期時間
      • setnx [key] [value] 不存在就設值
      • mset [key1] [value1] [key2] [value2] ..... 批量設定鍵值
      • mget [key1] [key2] 批量查詢鍵值
      • msetnx [key1] [value1] [key2] [value2] ..... 批量設定鍵值,不存在就塞值
      • getset [key] [value] 獲取老的值並設定新值
    3. List 列表

      命令都是以L,R開頭

      • lpush [key] [value] 插入列表頭
      • lrange [key] [start] [end] 獲取列表中的元素
      • rpush [key] [value] 插入列表尾
      • lpop [key] 移除第一個元素
      • rpop [key] 移除最後一個元素
      • lindex [key] [index] 獲取第index個元素
      • lrem [key] [num] [value] 精確匹配刪除指定的元素
      • ltrim [key] [start] [end] 擷取指定長度,快取中的值也會改變
      • rpoplpush [key1] [key2] 移除列表key1尾部的一個元素並放入列表key2的頭部
      • lset [key] [index] [value] 修改指定索引值
    4. Set集合

      • sadd [key] [value] 往集合中插入值
      • smembers [key] 檢視指定set的值
      • sismember [key] [value] 檢視某個值是否在set中
      • scard [key] 返回集合大小
      • srem [key] [value] 移除集合指定元素
      • srandmember [key] 隨機取出一個元素
      • srandmember [key] [num] 隨機取出num個元素
      • spop [key] 隨機取出某個元素並刪除
      • smove [key1] [key2] [value] 移除key1的元素到key2中
      • sdiff [key1] [key2] 差集
      • sinter [key1] [key2] 交集
      • sunion [key1] [key2] 並集
    5. hash雜湊

      • hset [key] [mkey] [mvalue] 往雜湊中插入值
      • hset [key] [mkey] 獲取雜湊中的某個值
      • hset [key] [mkey1] [mvalue1] [mkey2] [mvalue2] ... 往雜湊中批量插入值
      • hset [key] [mkey1] [mkey2] 獲取雜湊中的多個值
      • hgetall [key] 獲取雜湊中的所有值
      • hdel [key] [mkey] 刪除hash中的某個值
      • hlen [key] 獲取雜湊中的欄位數量
      • hexists [key] [mkey] 判斷是否存在某個key值
      • hkeys [key] 獲取雜湊中的所有欄位
      • hvals [key] 獲取雜湊中的所有值
      • hincyby [key] [mkey] 雜湊中對應的欄位值自增
      • hsetnx [key] [mkey] [mvalue] 不存在可以設定,存在就不能設定
    6. zset有序集合

      • zadd [key] [score] [value] 往有序集合中新增元素,並新增排序指標
      • zrange [key] [start] [end] 獲取有序集合元素
      • zrangebyscore [key]-inf +inf 獲取全部的集合,從小到大
      • zrevrange [key] [start] [end] 倒序獲取集合元素
      • zrem [key] [value] 移除某個元素
      • zcard [key] 獲取集合中的元素
      • zcount [key] [start] [end] 指定區間的成員數量