Redis(二)相關命令
(一)簡介
Redis 命令用於在 redis 服務上執行操作。
要在 redis 服務上執行命令需要一個 redis 客戶端。Redis 客戶端在我們之前下載的的 redis 的安裝包中。Redis 客戶端的基本語法為:redis-cli
[[email protected] ~]# /usr/local/redis-3.2.9/src/redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379>
遠程登錄為:
[[email protected] ~]# /usr/local/redis-3.2.9/src/redis-cli -h 127.0.0.1 -p 6379 -a "redis123456" 127.0.0.1:6379> ping PONG 127.0.0.1:6379>
(二)命令的詳解
(1)Redis鍵(key)。redis鍵命令用於管理redis的鍵
語法:127.0.0.1:6379> COMMAND KEY_NAME
實例如下:
127.0.0.1:6379> set foo redis OK 127.0.0.1:6379> get foo "redis" 127.0.0.1:6379> del foo (integer) 1 127.0.0.1:6379> get foo (nil)
在上邊的實例中set 是一個命令,foo是一個鍵,get foo是獲取這個鍵,del foo是刪除這個鍵,如果刪除成功後會輸出 (integer) 1,否則將輸出 (integer) 0
下表給出了與redis鍵相關的基本命令:
編號 | 命令 | 描述 |
---|---|---|
1 | DEL key | 此命令刪除一個指定鍵(如果存在)。 |
2 | DUMP key | 此命令返回存儲在指定鍵的值的序列化版本。 |
3 | EXISTS key | 此命令檢查鍵是否存在。 |
4 | EXPIRE key seconds | 設置鍵在指定時間秒數之後到期/過期。 |
5 | EXPIREAT key timestamp | 設置在指定時間戳之後鍵到期/過期。這裏的時間是Unix時間戳格式。 |
6 | PEXPIRE key milliseconds | 設置鍵的到期時間(以毫秒為單位)。 |
7 | PEXPIREAT key milliseconds-timestamp | 以Unix時間戳形式來設置鍵的到期時間(以毫秒為單位)。 |
8 | KEYS pattern | 查找與指定模式匹配的所有鍵。 |
9 | MOVE key db | 將鍵移動到另一個數據庫。 |
10 | PERSIST key | 刪除指定鍵的過期時間,得永生。 |
11 | PTTL key | 獲取鍵的剩余到期時間。 |
12 | RANDOMKEY | 從Redis返回一個隨機的鍵。 |
13 | RENAME key newkey | 更改鍵的名稱。 |
14 | PTTL key | 獲取鍵到期的剩余時間(以毫秒為單位)。 |
15 | RENAMENX key newkey | 如果新鍵不存在,重命名鍵。 |
16 | TYPE key | 返回存儲在鍵中的值的數據類型。 |
(2)redis字符串(string)。redis字符串數據類型的相關命令是用於管理redis字符串值。語法:
redis 127.0.0.1:6379> COMMAND KEY_NAME
實例:
127.0.0.1:6379> set country china OK 127.0.0.1:6379> get country "china"
在上邊的例子中,set和get是redis中的命令,而country是鍵的名稱。下表列出了redis中管理字符串的基本命令:
編號 | 命令 | 描述說明 |
---|---|---|
1 | SET key value | 此命令設置指定鍵的值。 |
2 | GET key | 獲取指定鍵的值。 |
3 | GETRANGE key start end | 獲取存儲在鍵上的字符串的子字符串。 |
4 | GETSET key value | 設置鍵的字符串值並返回其舊值。 |
5 | GETBIT key offset | 返回在鍵處存儲的字符串值中偏移處的位值。 |
6 | MGET key1 [key2..] | 獲取所有給定鍵的值 |
7 | SETBIT key offset value | 存儲在鍵上的字符串值中設置或清除偏移處的位 |
8 | SETEX key seconds value | 使用鍵和到期時間來設置值 |
9 | SETNX key value | 設置鍵的值,僅當鍵不存在時 |
10 | SETRANGE key offset value | 在指定偏移處開始的鍵處覆蓋字符串的一部分 |
11 | STRLEN key | 獲取存儲在鍵中的值的長度 |
12 | MSET key value [key value …] | 為多個鍵分別設置它們的值 |
13 | MSETNX key value [key value …] | 為多個鍵分別設置它們的值,僅當鍵不存在時 |
14 | PSETEX key milliseconds value | 設置鍵的值和到期時間(以毫秒為單位) |
15 | INCR key | 將鍵的整數值增加1 |
16 | INCRBY key increment | 將鍵的整數值按給定的數值增加 |
17 | INCRBYFLOAT key increment | 將鍵的浮點值按給定的數值增加 |
18 | DECR key | 將鍵的整數值減1 |
19 | DECRBY key decrement | 按給定數值減少鍵的整數值 |
20 | APPEND key value | 將指定值附加到鍵 |
(3)Redis 哈希(Hash)。Redis hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象。Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。
127.0.0.1:6379> HMSET myhash id "1" name "arvin" sex "man" address "china" OK 127.0.0.1:6379> hgetall myhash 1) "id" 2) "1" 3) "name" 4) "arvin" 5) "sex" 6) "man" 7) "address" 8) "china" 127.0.0.1:6379> hkeys myhash 1) "id" 2) "name" 3) "sex" 4) "address" 127.0.0.1:6379> hvals myhash 1) "1" 2) "arvin" 3) "man" 4) "china"
在上面的例子中設置了redis的一些描述信息(id,name sex address)到哈希表myhash中。
序號 | 命令 | 說明 |
---|---|---|
1 | HDEL key field2 [field2] | 刪除一個或多個哈希字段。 |
2 | HEXISTS key field | 判斷是否存在散列字段。 |
3 | HGET key field | 獲取存儲在指定鍵的哈希字段的值。 |
4 | HGETALL key | 獲取存儲在指定鍵的哈希中的所有字段和值 |
5 | HINCRBY key field increment | 將哈希字段的整數值按給定數字增加 |
6 | HINCRBYFLOAT key field increment | 將哈希字段的浮點值按給定數值增加 |
7 | HKEYS key | 獲取哈希中的所有字段 |
8 | HLEN key | 獲取散列中的字段數量 |
9 | HMGET key field1 [field2] | 獲取所有給定哈希字段的值 |
10 | HMSET key field1 value1 [field2 value2 ] | 為多個哈希字段分別設置它們的值 |
11 | HSET key field value | 設置散列字段的字符串值 |
12 | HSETNX key field value | 僅當字段不存在時,才設置散列字段的值 |
13 | HVALS key | 獲取哈希中的所有值 |
(4)redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。
127.0.0.1:6379> LPUSH database mysql (integer) 1 127.0.0.1:6379> LPUSH database oracle (integer) 2 127.0.0.1:6379> LPUSH database sql server (integer) 4 127.0.0.1:6379> LPUSH database db2 (integer) 5 127.0.0.1:6379> lrange database 0 4 1) "db2" 2) "server" 3) "sql" 4) "oracle" 5) "mysql"
已上列子通過LPUSH將四個值插入到名稱為database的redis列表中。列表常用的基本命令:
序號 | 命令 | 說明 |
---|---|---|
1 | BLPOP key1 [key2 ] timeout | 刪除並獲取列表中的第一個元素,或阻塞,直到有一個元素可用 |
2 | BRPOP key1 [key2 ] timeout | 刪除並獲取列表中的最後一個元素,或阻塞,直到有一個元素可用 |
3 | BRPOPLPUSH source destination timeout | 從列表中彈出值,將其推送到另一個列表並返回它; 或阻塞,直到一個可用 |
4 | LINDEX key index | 通過其索引從列表獲取元素 |
5 | LINSERT key BEFORE/AFTER pivot value | 在列表中的另一個元素之前或之後插入元素 |
6 | LLEN key | 獲取列表的長度 |
7 | LPOP key | 刪除並獲取列表中的第一個元素 |
8 | LPUSH key value1 [value2] | 將一個或多個值添加到列表 |
9 | LPUSHX key value | 僅當列表存在時,才向列表添加值 |
10 | LRANGE key start stop | 從列表中獲取一系列元素 |
11 | LREM key count value | 從列表中刪除元素 |
12 | LSET key index value | 通過索引在列表中設置元素的值 |
13 | LTRIM key start stop | 修剪列表的指定範圍 |
14 | RPOP key | 刪除並獲取列表中的最後一個元素 |
15 | RPOPLPUSH source destination | 刪除列表中的最後一個元素,將其附加到另一個列表並返回 |
16 | RPUSH key value1 [value2] | 將一個或多個值附加到列表 |
17 | RPUSHX key value | 僅當列表存在時才將值附加到列表 |
(5)Redis集合set。Redis的Set是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。Redis 中 集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。
127.0.0.1:6379> SADD myset "redis" (integer) 1 127.0.0.1:6379> SADD myset "mysql" (integer) 1 127.0.0.1:6379> SADD myset "mongodb" (integer) 1 127.0.0.1:6379> SADD myset "mysql" (integer) 0 127.0.0.1:6379> SMEMBERS MYSET (empty list or set) 127.0.0.1:6379> SMEMBERS myset 1) "mongodb" 2) "mysql" 3) "redis"
以上示例通過sadd將三個值插入到myset的redis集合中。
序號 | 命令 | 說明 |
---|---|---|
1 | SADD key member1 [member2] | 將一個或多個成員添加到集合 |
2 | SCARD key | 獲取集合中的成員數 |
3 | SDIFF key1 [key2] | 減去多個集合 |
4 | SDIFFSTORE destination key1 [key2] | 減去多個集並將結果集存儲在鍵中 |
5 | SINTER key1 [key2] | 相交多個集合 |
6 | SINTERSTORE destination key1 [key2] | 交叉多個集合並將結果集存儲在鍵中 |
7 | SISMEMBER key member | 判斷確定給定值是否是集合的成員 |
8 | SMOVE source destination member | 將成員從一個集合移動到另一個集合 |
9 | SPOP key | 從集合中刪除並返回隨機成員 |
10 | SRANDMEMBER key [count] | 從集合中獲取一個或多個隨機成員 |
11 | SREM key member1 [member2] | 從集合中刪除一個或多個成員 |
12 | SUNION key1 [key2] | 添加多個集合 |
13 | SUNIONSTORE destination key1 [key2] | 添加多個集並將結果集存儲在鍵中 |
14 | SSCAN key cursor [MATCH pattern] [COUNT count] | 遞增地叠代集合中的元素 |
(6)Redis有序集合(sorted set)和集合一樣也是string字符型元素的集合,且不允許有重復的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重復。集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
127.0.0.1:6379> zadd mysorted 1 redis (integer) 1 127.0.0.1:6379> zadd mysorted 3 mongodb (integer) 1 127.0.0.1:6379> zadd mysorted 2 mysql (integer) 1 127.0.0.1:6379> zadd mysorted 4 mysql (integer) 0 127.0.0.1:6379> zadd mysorted 6 mysql (integer) 0 127.0.0.1:6379> zrange mysorted 0 10 1) "redis" 2) "mongodb" 3) "mysql" 127.0.0.1:6379> zrange mysorted 0 10 withscores 1) "redis" 2) "1" 3) "mongodb" 4) "3" 5) "mysql" 6) "6"
(7)Redis HyperLogLog是用來做基數統計的算法,以少量內存提供集合中唯一元素數量的近似值。HyperLogLog 可以接受多個元素作為輸入,並給出輸入元素的基數估算值:
基數:集合中不同元素的數量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基數就是 3 。
估算值:算法給出的基數並不是精確的,可能會比實際稍微多一些或者稍微少一些,但會控制在合理的範圍之內。
HyperLogLog 的優點是,即使輸入元素的數量或者體積非常非常大,計算基數所需的空間總是固定的、並且是很小的。
在 Redis 裏面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以
HyperLogLog 不能像集合那樣,返回輸入的各個元素。
127.0.0.1:6379> pfadd qaz "redis" (integer) 1 127.0.0.1:6379> pfadd qaz "mysql" (integer) 1 127.0.0.1:6379> pfadd qaz "mongodb" (integer) 1 127.0.0.1:6379> pfcount qaz (integer) 3
序號 | 命令 | 說明 |
---|---|---|
1 | PFADD key element [element …] | 將指定的元素添加到指定的HyperLogLog 中。 |
2 | PFCOUNT key [key …] | 返回給定 HyperLogLog 的基數估算值。 |
3 | PFMERGE destkey sourcekey [sourcekey …] | 將多個 HyperLogLog 合並為一個 HyperLogLog |
(8)redis發布訂閱。
Redis發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
Redis 發布訂閱(pub/sub)實現了消息系統,發送者(在redis術語中稱為發布者)在接收者(訂閱者)接收消息時發送消息。傳送消息的鏈路稱為信道。
在Redis中,客戶端可以訂閱任意數量的信道
首先在一個客戶端輸入subscribe redischat,等待另一個客戶端輸入,顯示如下:
127.0.0.1:6379> subscribe redischat Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redischat" 3) (integer) 1 1) "message" 2) "redischat" 3) "hello everyont" 1) "message" 2) "redischat" 3) "redis is very great caching technique"
重新開個客戶端輸入如下:
127.0.0.1:6379> publish redischat "hello everyont" (integer) 1 127.0.0.1:6379> publish redischat "redis is very great caching technique" (integer) 1 127.0.0.1:6379> publish redischat "learn redis by lqb" (integer) 1 127.0.0.1:6379> publish redischat "learn redis by lqb" (integer) 1
下表列出了與Redis發布訂閱相關的一些基本命令。
序號 | 命令 | 說明 |
---|---|---|
1 | PSUBSCRIBE pattern [pattern …] | 訂閱一個或多個符合給定模式的頻道。 |
2 | PUBSUB subcommand [argument [argument …]] | 查看訂閱與發布系統狀態。 |
3 | PUBLISH channel message | 將信息發送到指定的頻道。 |
4 | PUNSUBSCRIBE [pattern [pattern …]] | 退訂所有給定模式的頻道。 |
5 | SUBSCRIBE channel [channel …] | 訂閱給定的一個或多個頻道的信息。 |
6 | UNSUBSCRIBE [channel [channel …]] | 退訂給定的頻道。 |
(9)Redis事物。Redis 事務可以一次執行多個命令, 並且帶有以下兩個重要的保證:
事務中的所有命令作為單個隔離操作並按順序執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
Redis事務也是原子的。原子意味著要麽處理所有命令,要麽都不處理。
一個事務從開始到執行會經歷以下三個階段:
開始事務。
命令入隊。
執行事務。
實例:Redis事務由命令MULTI命令啟動,然後需要傳遞一個應該在事務中執行的命令列表,然後整個事務由EXEC命令執行。
127.0.0.1:6379> multi OK 127.0.0.1:6379> set foo "this is test page" QUEUED 127.0.0.1:6379> get book-name QUEUED 127.0.0.1:6379> sadd tag "c++ is very good programming" QUEUED 127.0.0.1:6379> smembers tag QUEUED 127.0.0.1:6379> exec 1) OK 2) (nil) 3) (integer) 1 4) 1) "c++ is very good programming" 127.0.0.1:6379> multi OK 127.0.0.1:6379> set mykey "redis" QUEUED 127.0.0.1:6379> get mykey QUEUED 127.0.0.1:6379> incr visitors QUEUED 127.0.0.1:6379> exec 1) OK 2) "redis" 3) (integer) 1
與redis相關的基本命令:
序號 | 命令 | 說明 |
---|---|---|
1 | DISCARD | 丟棄在MULTI之後發出的所有命令 |
2 | EXEC | 執行MULTI後發出的所有命令 |
3 | MULTI | 標記事務塊的開始 |
4 | UNWATCH | 取消 WATCH 命令對所有 key 的監視。 |
5 | WATCH key [key …] | 監視給定的鍵以確定MULTI / EXEC塊的執行 |
(10)redis腳本。Redis腳本使用 Lua 解釋器來執行腳本。 Reids 2.6 版本通過內嵌支持 Lua 環境。執行腳本的常用命令為 EVAL
127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second"
下表列出了與Redis腳本相關的一些基本命令。
序號 | 命令 | 說明 |
---|---|---|
1 | EVAL script numkeys key [key …] arg [arg …] | 執行一個Lua腳本。 |
2 | EVALSHA sha1 numkeys key [key …] arg [arg …] | 執行一個Lua腳本。 |
3 | SCRIPT EXISTS script [script …] | 檢查腳本緩存中是否存在腳本。 |
4 | SCRIPT FLUSH | 從腳本緩存中刪除所有腳本。 |
5 | SCRIPT KILL | 殺死當前正在執行的腳本。 |
6 | SCRIPT LOAD script | 將指定的Lua腳本加載到腳本緩存中。 |
(11)Redis連接。Redis中的連接命令基本上是用於管理與Redis服務器的客戶端連接。
redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG
下表列出了與Redis連接相關的一些基本命令。
序號 | 命令 | 說明 |
---|---|---|
1 | AUTH password | 使用給定的密碼驗證服務器 |
2 | ECHO message | 打印給定的字符串信息 |
3 | PING | 檢查服務器是否正在運行 |
4 | QUIT | 關閉當前連接 |
5 | SELECT index | 更改當前連接的所選數據庫 |
(12)Redis 服務器,Redis 服務器命令主要是用於管理 redis 服務
127.0.0.1:6379> info # Server redis_version:3.2.9 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:2f58f346024ca4bb redis_mode:standalone os:Linux 3.10.0-327.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.5 process_id:2329 run_id:bf5c0b97691ac975438fb6a954b13ed9a9d564ba tcp_port:6379 uptime_in_seconds:97760 uptime_in_days:1 hz:10 lru_clock:4162916 executable:/usr/local/redis-3.2.9/src/redis-server config_file: # Clients connected_clients:2 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:913168 used_memory_human:891.77K used_memory_rss:2727936 used_memory_rss_human:2.60M used_memory_peak:913168 used_memory_peak_human:891.77K total_system_memory:3968024576 total_system_memory_human:3.70G used_memory_lua:40960 used_memory_lua_human:40.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:2.99 mem_allocator:libc # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1497328628 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:6 total_commands_processed:180 instantaneous_ops_per_sec:0 total_net_input_bytes:7123 total_net_output_bytes:35960048 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:171 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:0 evicted_keys:0 keyspace_hits:70 keyspace_misses:13 pubsub_channels:1 pubsub_patterns:0 latest_fork_usec:113 migrate_cached_sockets:0 # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # CPU used_cpu_sys:33.59 used_cpu_user:14.42 used_cpu_sys_children:0.01 used_cpu_user_children:0.00 # Cluster cluster_enabled:0 # Keyspace db0:keys=20,expires=0,avg_ttl=0
下表列出了與Redis服務器相關的一些基本命令。
序號 | 命令 | 說明 |
---|---|---|
1 | BGREWRITEAOF | 異步重寫僅追加的文件 |
2 | BGSAVE | 將數據集異步保存到磁盤 |
3 | CLIENT KILL [ip:port] [ID client-id] | 殺死或斷開指定的客戶端的連接 |
4 | CLIENT LIST | 獲取到服務器的客戶端連接列表 |
5 | CLIENT GETNAME | 獲取當前連接的名稱 |
6 | CLIENT PAUSE timeout | 在指定時間內停止處理來自客戶端的命令 |
7 | CLIENT SETNAME connection-name | 設置當前連接名稱 |
8 | CLUSTER SLOTS | 獲取群集插槽到節點映射的數組 |
9 | COMMAND | 獲取Redis命令詳細信息的數組 |
10 | COMMAND COUNT | 獲取Redis命令的總數 |
11 | COMMAND GETKEYS | 提取鍵給出一個完整的Redis的命令 |
12 | BGSAVE | 將數據集異步保存到磁盤 |
13 | COMMAND INFO command-name [command-name …] | 獲取特定Redis命令詳細信息的數組 |
14 | CONFIG GET parameter | 獲取配置參數的值 |
15 | CONFIG REWRITE | 使用內存中配置來重寫配置文件 |
16 | CONFIG SET parameter value | 將配置參數設置為給定值 |
17 | CONFIG RESETSTAT | 重置由INFO返回的統計信息 |
18 | DBSIZE | 返回所選數據庫中的鍵數量 |
19 | DEBUG OBJECT key | 獲取有關鍵的調試信息 |
20 | DEBUG SEGFAULT | 使服務器崩潰 |
21 | FLUSHALL | 從所有數據庫中刪除所有鍵 |
22 | FLUSHDB | 刪除當前數據庫中的所有鍵 |
23 | INFO [section] | 獲取有關服務器的信息和統計信息 |
24 | LASTSAVE | 獲取上次成功保存到磁盤的UNIX時間戳 |
25 | MONITOR | 監聽服務器實時接收的所有請求 |
26 | ROLE | 返回實例在復制上下文中的角色 |
27 | SAVE | 將數據集同步保存到磁盤 |
28 | SHUTDOWN [NOSAVE] [SAVE] | 將數據集同步保存到磁盤,然後關閉服務器 |
29 | SLAVEOF host port | 使服務器成為另一個實例的從屬,或將其提升作為主服務器 |
30 | SLOWLOG subcommand [argument] | 管理Redis慢查詢日誌 |
31 | SYNC | 用於復制的命令 |
32 | TIME | 返回當前服務器的時間 |
本文出自 “清風明月” 博客,請務必保留此出處http://liqingbiao.blog.51cto.com/3044896/1934927
Redis(二)相關命令