keys * 遍歷全部key keys [pattern] 遍歷模式下全部的key dbsize 計算Redis中全部key的總數
例子:php
127.0.0.1:6379> set hello world OK 127.0.0.1:6379> set php good OK 127.0.0.1:6379> set python best OK 127.0.0.1:6379> keys * # 查看Redis中全部的key 1) "hello" 2) "python" 3) "php" 127.0.0.1:6379> dbsize # 查看Redis中key的總數 (integer) 3 127.0.0.1:6379> keys p* # 查看Redis中以p開頭的全部的key 1) "python" 2) "php" 127.0.0.1:6379> set perl aaa OK 127.0.0.1:6379> set c++ bbb OK 127.0.0.1:6379> keys p* # 查看Redis中全部的key 1) "python" 2) "php" 3) "perl" 127.0.0.1:6379> dbsize # 查看Redis中key的總數 (integer) 5 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 OK 127.0.0.1:6379> dbsize # 查看Redis中key的總數 (integer) 9
注意事項:python
!.keys命令的時間複雜度爲O(n) 2.在生產環境中,使用keys命令取出全部key並無什麼意義,並且Redis是單線程應用,若是Redis中存的key不少,使用keys命令會阻塞其餘命令執行,因此keys命令通常不在生產環境中使用 3.dbsize命令的時間複雜度是O(1) 4.Redis內置一個計數器,能夠實時更新Redis中key的總數,因此dbsize命令能夠在線上使用
exists key 判斷一個key是否存在 del key [key...] 刪除指定的key-value
例子:c++
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> exists k1 # 判斷k1是否存在 (integer) 1 127.0.0.1:6379> exists k2 # 判斷k2是否存在 (integer) 1 127.0.0.1:6379> del k1 # 刪除k1這個鍵值對 (integer) 1 127.0.0.1:6379> exists k1 # 判斷k1是否存在,0表示不存在 (integer) 0 127.0.0.1:6379> exists k2 # 判斷k2是否存在,1表示key存在 (integer) 1 127.0.0.1:6379> set a1 b1 OK 127.0.0.1:6379> set a2 b2 OK 127.0.0.1:6379> del a1 a2 # 刪除a1和a2鍵值對 (integer) 2
注意事項:redis
del命令和exists命令的時間複雜度爲O(1)
expire key seconds 設置key的過時時間,多少seconds後過時 ttl key 查看key剩餘的過時時間 persist key 去掉key的過時時間
例子:編程
127.0.0.1:6379> set hello world OK 127.0.0.1:6379> expire hello 20 (integer) 1 # 設置hello這個key的過時時間爲20秒 127.0.0.1:6379> ttl hello (integer) 17 # 還有17秒過時 127.0.0.1:6379> ttl hello (integer) 11 # 還有11秒過時 127.0.0.1:6379> get hello "world" 127.0.0.1:6379> ttl hello (integer) 5 # 還有5秒過時 127.0.0.1:6379> ttl hello (integer) -2 # -2表示key已經不存在了 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> expire hello 20 (integer) 1 # 設置hello這個key的過時時間爲20秒 127.0.0.1:6379> ttl hello (integer) 15 # 還有15秒過時 127.0.0.1:6379> persist hello (integer) 1 # 刪除hello的過時時間 127.0.0.1:6379> ttl hello (integer) -1 # -1表示key存在,而且沒有過時時間 127.0.0.1:6379> get hello "world"
注意事項:api
expire命令和ttl命令,persist命令的時間複雜度都是O(1)
type key # 返回key的類型
例子:數據結構
127.0.0.1:6379> set a b OK 127.0.0.1:6379> type a string 127.0.0.1:6379> sadd myset 1 2 3 (integer) 3 127.0.0.1:6379> type myset set 127.0.0.1:6379> type abc # 查看一個不存在的key時,返回None,表示key不存在 none
注意事項:多線程
type的返回結果有6種:string,hash,list,set,zset,none type命令的時間複雜度爲O(1)
Redis每種數據結構及對應的內部編碼以下圖所示架構
Redis內部使用單線程架構。異步
好比一條公路,這條公路只有一條車道。全部從這條車道上行駛的車,都必須按先來後到的順序依次行駛
Redis一個瞬間只能執行一條命令,不能執行兩條命令
1.純內存 Redis把全部的數據都保存在內存中,而內存的響應速度是很是快的 2.非阻塞IO Redis使用epoll異步非阻塞模型 Redis自身實現了事件處理 3.避免線程切換和競態消耗 在使用多線程編程中,線程之間的切換也會消耗一部分CPU資源, 若是不合理的實現多線程編程,可能比單線程還要慢
注意事項:
一次只運行一條命令 拒絕長(慢)命令 keys flushall flushdb slow lua script mutil/exec operate