溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis(二)相關命令

發(fā)布時間:2020-07-03 02:36:23 來源:網(wǎng)絡 閱讀:2229 作者:lqbyz 欄目:建站服務器

(一)簡介

Redis 命令用于在 redis 服務上執(zhí)行操作。

要在 redis 服務上執(zhí)行命令需要一個 redis 客戶端。Redis 客戶端在我們之前下載的的 redis 的安裝包中。Redis 客戶端的基本語法為:redis-cli

[root@localhost ~]# /usr/local/redis-3.2.9/src/redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

遠程登錄為:

[root@localhost ~]# /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設置鍵在指定時間秒數(shù)之后到期/過期。
5EXPIREAT key timestamp設置在指定時間戳之后鍵到期/過期。這里的時間是Unix時間戳格式。
6PEXPIRE key milliseconds設置鍵的到期時間(以毫秒為單位)。
7PEXPIREAT key milliseconds-timestamp以Unix時間戳形式來設置鍵的到期時間(以毫秒為單位)。
8KEYS pattern查找與指定模式匹配的所有鍵。
9MOVE key db將鍵移動到另一個數(shù)據(jù)庫。
10PERSIST key刪除指定鍵的過期時間,得永生。
11PTTL key獲取鍵的剩余到期時間。
12RANDOMKEY從Redis返回一個隨機的鍵。
13RENAME key newkey更改鍵的名稱。
14PTTL key獲取鍵到期的剩余時間(以毫秒為單位)。
15RENAMENX key newkey如果新鍵不存在,重命名鍵。
16TYPE key返回存儲在鍵中的值的數(shù)據(jù)類型。


(2)redis字符串(string)。redis字符串數(shù)據(jù)類型的相關命令是用于管理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將鍵的整數(shù)值增加1
16INCRBY key increment將鍵的整數(shù)值按給定的數(shù)值增加
17INCRBYFLOAT key increment將鍵的浮點值按給定的數(shù)值增加
18DECR key將鍵的整數(shù)值減1
19DECRBY key decrement按給定數(shù)值減少鍵的整數(shù)值
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將哈希字段的整數(shù)值按給定數(shù)字增加
6HINCRBYFLOAT key field increment將哈希字段的浮點值按給定數(shù)值增加
7HKEYS key獲取哈希中的所有字段
8HLEN key獲取散列中的字段數(shù)量
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類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復的數(shù)據(jù)。Redis 中 集合是通過哈希表實現(xiàn)的,所以添加,刪除,查找的復雜度都是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獲取集合中的成員數(shù)
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字符型元素的集合,且不允許有重復的成員。不同的是每個元素都會關聯(lián)一個double類型的分數(shù)。redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(shù)(score)卻可以重復。集合是通過哈希表實現(xiàn)的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數(shù)為 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是用來做基數(shù)統(tǒng)計的算法,以少量內(nèi)存提供集合中唯一元素數(shù)量的近似值。HyperLogLog 可以接受多個元素作為輸入,并給出輸入元素的基數(shù)估算值:

  • 基數(shù):集合中不同元素的數(shù)量。比如 {‘a(chǎn)pple’, ‘banana’, ‘cherry’, ‘banana’, ‘a(chǎn)pple’} 的基數(shù)就是 3 。

  • 估算值:算法給出的基數(shù)并不是精確的,可能會比實際稍微多一些或者稍微少一些,但會控制在合理的范圍之內(nèi)。

HyperLogLog 的優(yōu)點是,即使輸入元素的數(shù)量或者體積非常非常大,計算基數(shù)所需的空間總是固定的、并且是很小的。

在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內(nèi)存,就可以計算接近 2^64 個不同元素的基數(shù)。這和計算基數(shù)時,元素越多耗費內(nèi)存就越多的集合形成鮮明對比。

但是,因為 HyperLogLog 只會根據(jù)輸入元素來計算基數(shù),而不會儲存輸入元素本身,所以
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 的基數(shù)估算值。
3PFMERGE destkey sourcekey [sourcekey …]將多個 HyperLogLog 合并為一個 HyperLogLog


 (8)redis發(fā)布訂閱。

Redis發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。
Redis 發(fā)布訂閱(pub/sub)實現(xiàn)了消息系統(tǒng),發(fā)送者(在redis術語中稱為發(fā)布者)在接收者(訂閱者)接收消息時發(fā)送消息。傳送消息的鏈路稱為信道。

在Redis中,客戶端可以訂閱任意數(shù)量的信道

首先在一個客戶端輸入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發(fā)布訂閱相關的一些基本命令。

序號命令說明
1PSUBSCRIBE pattern [pattern …]訂閱一個或多個符合給定模式的頻道。
2PUBSUB subcommand [argument [argument …]]查看訂閱與發(fā)布系統(tǒng)狀態(tài)。
3PUBLISH channel message將信息發(fā)送到指定的頻道。
4PUNSUBSCRIBE [pattern [pattern …]]退訂所有給定模式的頻道。
5SUBSCRIBE channel [channel …]訂閱給定的一個或多個頻道的信息。
6UNSUBSCRIBE [channel [channel …]]退訂給定的頻道。


 (9)Redis事物。Redis 事務可以一次執(zhí)行多個命令, 并且?guī)в幸韵聝蓚€重要的保證:

  • 事務中的所有命令作為單個隔離操作并按順序執(zhí)行。事務在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷。

  • Redis事務也是原子的。原子意味著要么處理所有命令,要么都不處理。

一個事務從開始到執(zhí)行會經(jīng)歷以下三個階段:

  • 開始事務。

  • 命令入隊。

  • 執(zhí)行事務。

實例:Redis事務由命令MULTI命令啟動,然后需要傳遞一個應該在事務中執(zhí)行的命令列表,然后整個事務由EXEC命令執(zhí)行。

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之后發(fā)出的所有命令
2EXEC執(zhí)行MULTI后發(fā)出的所有命令
3MULTI標記事務塊的開始
4UNWATCH取消 WATCH 命令對所有 key 的監(jiān)視。
5WATCH key [key …]監(jiān)視給定的鍵以確定MULTI / EXEC塊的執(zhí)行


 (10)redis腳本。Redis腳本使用 Lua 解釋器來執(zhí)行腳本。 Reids 2.6 版本通過內(nèi)嵌支持 Lua 環(huán)境。執(zhí)行腳本的常用命令為 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 …]執(zhí)行一個Lua腳本。
2EVALSHA sha1 numkeys key [key …] arg [arg …]執(zhí)行一個Lua腳本。
3SCRIPT EXISTS script [script …]檢查腳本緩存中是否存在腳本。
4SCRIPT FLUSH從腳本緩存中刪除所有腳本。
5SCRIPT KILL殺死當前正在執(zhí)行的腳本。
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更改當前連接的所選數(shù)據(jù)庫


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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI