1. 程式人生 > >Redis(二)相關命令

Redis(二)相關命令

redis redis.conf redis-cli

(一)簡介

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鍵相關的基本命令:

編號命令描述
1DEL key此命令刪除一個指定鍵(如果存在)。
2DUMP key此命令返回存儲在指定鍵的值的序列化版本。
3EXISTS key此命令檢查鍵是否存在。
4EXPIRE key seconds設置鍵在指定時間秒數之後到期/過期。
5EXPIREAT key timestamp設置在指定時間戳之後鍵到期/過期。這裏的時間是Unix時間戳格式。
6PEXPIRE key milliseconds設置鍵的到期時間(以毫秒為單位)。
7PEXPIREAT key milliseconds-timestamp以Unix時間戳形式來設置鍵的到期時間(以毫秒為單位)。
8KEYS pattern查找與指定模式匹配的所有鍵。
9MOVE key db將鍵移動到另一個數據庫。
10PERSIST key刪除指定鍵的過期時間,得永生。
11PTTL key獲取鍵的剩余到期時間。
12RANDOMKEY從Redis返回一個隨機的鍵。
13RENAME key newkey更改鍵的名稱。
14PTTL key獲取鍵到期的剩余時間(以毫秒為單位)。
15RENAMENX key newkey如果新鍵不存在,重命名鍵。
16TYPE 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中管理字符串的基本命令:

編號命令描述說明
1SET key value此命令設置指定鍵的值。
2GET key獲取指定鍵的值。
3GETRANGE key start end獲取存儲在鍵上的字符串的子字符串。
4GETSET key value設置鍵的字符串值並返回其舊值。
5GETBIT key offset返回在鍵處存儲的字符串值中偏移處的位值。
6MGET key1 [key2..]獲取所有給定鍵的值
7SETBIT key offset value存儲在鍵上的字符串值中設置或清除偏移處的位
8SETEX key seconds value使用鍵和到期時間來設置值
9SETNX key value設置鍵的值,僅當鍵不存在時
10SETRANGE key offset value在指定偏移處開始的鍵處覆蓋字符串的一部分
11STRLEN key獲取存儲在鍵中的值的長度
12MSET key value [key value …]為多個鍵分別設置它們的值
13MSETNX key value [key value …]為多個鍵分別設置它們的值,僅當鍵不存在時
14PSETEX key milliseconds value設置鍵的值和到期時間(以毫秒為單位)
15INCR key將鍵的整數值增加1
16INCRBY key increment將鍵的整數值按給定的數值增加
17INCRBYFLOAT key increment將鍵的浮點值按給定的數值增加
18DECR key將鍵的整數值減1
19DECRBY key decrement按給定數值減少鍵的整數值
20APPEND 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中。

序號命令說明
1HDEL key field2 [field2]刪除一個或多個哈希字段。
2HEXISTS key field判斷是否存在散列字段。
3HGET key field獲取存儲在指定鍵的哈希字段的值。
4HGETALL key獲取存儲在指定鍵的哈希中的所有字段和值
5HINCRBY key field increment將哈希字段的整數值按給定數字增加
6HINCRBYFLOAT key field increment將哈希字段的浮點值按給定數值增加
7HKEYS key獲取哈希中的所有字段
8HLEN key獲取散列中的字段數量
9HMGET key field1 [field2]獲取所有給定哈希字段的值
10HMSET key field1 value1 [field2 value2 ]為多個哈希字段分別設置它們的值
11HSET key field value設置散列字段的字符串值
12HSETNX key field value僅當字段不存在時,才設置散列字段的值
13HVALS 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列表中。列表常用的基本命令:

序號命令說明
1BLPOP key1 [key2 ] timeout刪除並獲取列表中的第一個元素,或阻塞,直到有一個元素可用
2BRPOP key1 [key2 ] timeout刪除並獲取列表中的最後一個元素,或阻塞,直到有一個元素可用
3BRPOPLPUSH source destination timeout從列表中彈出值,將其推送到另一個列表並返回它; 或阻塞,直到一個可用
4LINDEX key index通過其索引從列表獲取元素
5LINSERT key BEFORE/AFTER pivot value在列表中的另一個元素之前或之後插入元素
6LLEN key獲取列表的長度
7LPOP key刪除並獲取列表中的第一個元素
8LPUSH key value1 [value2]將一個或多個值添加到列表
9LPUSHX key value僅當列表存在時,才向列表添加值
10LRANGE key start stop從列表中獲取一系列元素
11LREM key count value從列表中刪除元素
12LSET key index value通過索引在列表中設置元素的值
13LTRIM key start stop修剪列表的指定範圍
14RPOP key刪除並獲取列表中的最後一個元素
15RPOPLPUSH source destination刪除列表中的最後一個元素,將其附加到另一個列表並返回
16RPUSH key value1 [value2]將一個或多個值附加到列表
17RPUSHX 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集合中。

序號命令說明
1SADD key member1 [member2]將一個或多個成員添加到集合
2SCARD key獲取集合中的成員數
3SDIFF key1 [key2]減去多個集合
4SDIFFSTORE destination key1 [key2]減去多個集並將結果集存儲在鍵中
5SINTER key1 [key2]相交多個集合
6SINTERSTORE destination key1 [key2]交叉多個集合並將結果集存儲在鍵中
7SISMEMBER key member判斷確定給定值是否是集合的成員
8SMOVE source destination member將成員從一個集合移動到另一個集合
9SPOP key從集合中刪除並返回隨機成員
10SRANDMEMBER key [count]從集合中獲取一個或多個隨機成員
11SREM key member1 [member2]從集合中刪除一個或多個成員
12SUNION key1 [key2]添加多個集合
13SUNIONSTORE destination key1 [key2]添加多個集並將結果集存儲在鍵中
14SSCAN 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
序號命令說明
1PFADD key element [element …]將指定的元素添加到指定的HyperLogLog 中。
2PFCOUNT key [key …]返回給定 HyperLogLog 的基數估算值。
3PFMERGE 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發布訂閱相關的一些基本命令。

序號命令說明
1PSUBSCRIBE pattern [pattern …]訂閱一個或多個符合給定模式的頻道。
2PUBSUB subcommand [argument [argument …]]查看訂閱與發布系統狀態。
3PUBLISH channel message將信息發送到指定的頻道。
4PUNSUBSCRIBE [pattern [pattern …]]退訂所有給定模式的頻道。
5SUBSCRIBE channel [channel …]訂閱給定的一個或多個頻道的信息。
6UNSUBSCRIBE [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相關的基本命令:


序號命令說明
1DISCARD丟棄在MULTI之後發出的所有命令
2EXEC執行MULTI後發出的所有命令
3MULTI標記事務塊的開始
4UNWATCH取消 WATCH 命令對所有 key 的監視。
5WATCH 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腳本相關的一些基本命令。

序號命令說明
1EVAL script numkeys key [key …] arg [arg …]執行一個Lua腳本。
2EVALSHA sha1 numkeys key [key …] arg [arg …]執行一個Lua腳本。
3SCRIPT EXISTS script [script …]檢查腳本緩存中是否存在腳本。
4SCRIPT FLUSH從腳本緩存中刪除所有腳本。
5SCRIPT KILL殺死當前正在執行的腳本。
6SCRIPT 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連接相關的一些基本命令。

序號命令說明
1AUTH password使用給定的密碼驗證服務器
2ECHO message打印給定的字符串信息
3PING檢查服務器是否正在運行
4QUIT關閉當前連接
5SELECT 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服務器相關的一些基本命令。

序號命令說明
1BGREWRITEAOF異步重寫僅追加的文件
2BGSAVE將數據集異步保存到磁盤
3CLIENT KILL [ip:port] [ID client-id]殺死或斷開指定的客戶端的連接
4CLIENT LIST獲取到服務器的客戶端連接列表
5CLIENT GETNAME獲取當前連接的名稱
6CLIENT PAUSE timeout在指定時間內停止處理來自客戶端的命令
7CLIENT SETNAME connection-name設置當前連接名稱
8CLUSTER SLOTS獲取群集插槽到節點映射的數組
9COMMAND獲取Redis命令詳細信息的數組
10COMMAND COUNT獲取Redis命令的總數
11COMMAND GETKEYS提取鍵給出一個完整的Redis的命令
12BGSAVE將數據集異步保存到磁盤
13COMMAND INFO command-name [command-name …]獲取特定Redis命令詳細信息的數組
14CONFIG GET parameter獲取配置參數的值
15CONFIG REWRITE使用內存中配置來重寫配置文件
16CONFIG SET parameter value將配置參數設置為給定值
17CONFIG RESETSTAT重置由INFO返回的統計信息
18DBSIZE返回所選數據庫中的鍵數量
19DEBUG OBJECT key獲取有關鍵的調試信息
20DEBUG SEGFAULT使服務器崩潰
21FLUSHALL從所有數據庫中刪除所有鍵
22FLUSHDB刪除當前數據庫中的所有鍵
23INFO [section]獲取有關服務器的信息和統計信息
24LASTSAVE獲取上次成功保存到磁盤的UNIX時間戳
25MONITOR監聽服務器實時接收的所有請求
26ROLE返回實例在復制上下文中的角色
27SAVE將數據集同步保存到磁盤
28SHUTDOWN [NOSAVE] [SAVE]將數據集同步保存到磁盤,然後關閉服務器
29SLAVEOF host port使服務器成為另一個實例的從屬,或將其提升作為主服務器
30SLOWLOG subcommand [argument]管理Redis慢查詢日誌
31SYNC用於復制的命令
32TIME返回當前服務器的時間


本文出自 “清風明月” 博客,請務必保留此出處http://liqingbiao.blog.51cto.com/3044896/1934927

Redis(二)相關命令