【Redis】Redis常用命令
Redis命令交互模式
redis-cli是Redis命令行界面,可以向Redis發(fā)送命令,并直接從終端讀取服務(wù)器發(fā)送的回復(fù)。
它有兩種主要模式:一種交互模式,其中有一個(gè)REPL(read eval print loop),用戶輸入命令并獲取回復(fù);另一種模式(非REPL)是將命令作為參數(shù)發(fā)送redis-cli,執(zhí)行并打印在標(biāo)準(zhǔn)輸出中。 我們一般都是使用REPL模式。
如下 就是REPL模式
127.0.0.1:6379> set name jack OK 127.0.0.1:6379> get name "jack"
下面這個(gè)是非REPL模式
[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 set name lucy -a 輸入密碼 OK [root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 get name "lucy"
Redis字符串命令
1. SET key value :設(shè)置指定 key 的值,不管key是否存在都設(shè)置。可以設(shè)置value為普通字符串,json字符串,數(shù)字。value的大小限制為512M。
2. GET key :獲取指定 key 的值。
3. DEL key :刪除指定 key 的值。
4. INCR key:將 key 中儲(chǔ)存的數(shù)字值增一,如果key不存在,自增后key = 1。
5. DECR key:將 key 中儲(chǔ)存的數(shù)字值減一,如果key不存在,自減后key = -1。
6. INCRBY key increment:將 key 所儲(chǔ)存的值加上給定的增量值(increment)。
7. DECRBY key decrement:將key 所儲(chǔ)存的值減去給定的減量值(decrement) 。
8. SETNX key value:和SET命令類似,只是SETNX要求key不存在的時(shí)候才能設(shè)置。
9. SET key value XX:要求key存在的時(shí)候才能設(shè)置,相當(dāng)于更新操作。
10. MSET key value [key value ...]:同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì)。
11. MSETNX key value [key value ...] :同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在。
12. MGET key1 [key2..] : 獲取所有(一個(gè)或多個(gè))給定 key 的值。MGET命令可以在需要獲取多個(gè)key值時(shí)候一次性獲取從而節(jié)省網(wǎng)絡(luò)開銷。下圖分析。
n次get命令獲取需要多次網(wǎng)絡(luò)傳遞。
一次mget可以省去大量的網(wǎng)絡(luò)傳輸時(shí)間
當(dāng)然mget也不能一次性獲取太多的key的,比如幾十萬個(gè),這個(gè)也是會(huì)阻塞Redis的執(zhí)行的。
13. getset key newValue:設(shè)置key新值并返回舊的值。
14. append key value:將新的value追加到舊的value上。
15. strlen value:計(jì)算字符串長(zhǎng)度(注意中文返回的長(zhǎng)度)。
Redis哈希(Hash)命令
Redis hash命令和字符串命令也是鍵值對(duì)形式,不過和字符串不同,hash多了一個(gè)field,field可以認(rèn)為是一個(gè)屬性。hash其實(shí)就是是一個(gè)string 類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象,雖然Redis字符串也可以,但是需要序列化需要通過編程語(yǔ)言去解析(產(chǎn)生序列化開銷),而hash更容易實(shí)現(xiàn),直觀和管理。如下圖將一個(gè)用戶信息存儲(chǔ)在hash中。
hash中的field不能相同。
1. HGET key field :獲取存儲(chǔ)在哈希表中指定key對(duì)應(yīng)field的value。
2. HSET key field value :將哈希表 key 中的字段 field 的值設(shè)為 value 。
3. HDEL key field1 [field2] :刪除一個(gè)或多個(gè)哈希表key的field。
4. HKEYS key :獲取所有哈希表中的字段。
5. HGETALL key :獲取在哈希表中指定 key 的所有字段和值。
6. HEXISTS key:判斷key是否有field。
7. HLEN key :獲取哈希表key中field的個(gè)數(shù)。
8.HMGET key field1 [field2] :獲取所有給定字段的值。
9. HINCRBY key field increment :為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 。
10. HVALS key :獲取哈希表中key所有的field的值。
Redis列表(List)命令
Redis列表結(jié)構(gòu)是簡(jiǎn)單的字符串列表,List的value是一個(gè)有序的隊(duì)列,是按照插入順序排序。可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊),而且列表是允許重復(fù)數(shù)據(jù)存在的。下圖是列表的結(jié)構(gòu)。
List底層是一個(gè)鏈表結(jié)構(gòu)。
1. LPUSH key value1 [value2] :從左邊向列表添加一個(gè)或多個(gè)值。
2. LPOP key :移出并獲取列表的左邊第一個(gè)元素。
3. RPUSH key value1 [value2] :從右邊向列表中添加一個(gè)或多個(gè)值。
4. RPOP key :移除列表的最后一個(gè)元素,返回值為移除的元素。
5. LLEN key: 獲取列表長(zhǎng)度。
6. LINSERT key BEFORE | AFTER value newValue:在列表的元素前或者后插入元素。時(shí)間復(fù)雜度O(n)。
7. LREM key count value :因?yàn)榱斜磉\(yùn)行存在相同的值,所以這里L(fēng)REM命令可以根據(jù)count值來刪除列表所有value相等的項(xiàng)。根據(jù)count值分下面幾種情況:
1)count > 0 :從左到右,刪除最多count個(gè)value相等的項(xiàng)。
2)count < 0 :從右到左,刪除最多Math.abs(count)個(gè)value相等的項(xiàng)。
3)count = 0 :刪除所有value相等的項(xiàng)。
8.LTRIM key start stop :按照索引范圍對(duì)一個(gè)列表進(jìn)行修剪(trim),讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。
9. LRANGE key start stop :獲取列表指定范圍內(nèi)的元素。LRANGE復(fù)雜度是O(s+n),其中s為列表的表頭或表尾到偏移量位置的元素個(gè)數(shù),者取決于列表大小,n代表返回的元素總數(shù)。
10. LINDEX key index :通過索引獲取列表中的元素。
11. LSET key index newValue:設(shè)置列表指定索引的值。
12. BLPOP key1 [key2 ] timeout :移出并獲取列表的第一個(gè)元素, 如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止,timeout是阻塞超時(shí)時(shí)間,timeout = 0表示永遠(yuǎn)不阻塞。
13. BRPOP key1 [key2 ] timeout :移出并獲取列表的最后一個(gè)元素, 如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
Redis集合(SET)命令
Redis 中的集合是String類型的無序集合。集合成員是唯一的,不能出現(xiàn)重復(fù)的數(shù)據(jù)。Redis 中集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。集合中數(shù)據(jù)是無序的,所以是無法通過索引下標(biāo)去查找。
一般集合可以用于微博中關(guān)注的共同好友這樣的場(chǎng)景。
1. SADD key member1 [member2] :向集合添加一個(gè)或多個(gè)成員,如果成員存在則添加失敗。
2. SREM key member1 [member2] :刪除集合中一個(gè)或多個(gè)成員。
3. SMEMBERS key :返回集合中的所有成員,返回的結(jié)果是無序的,如果集合中數(shù)據(jù)很多該命令要慎重使用。
4. SISMEMBER key member :判斷 member 元素是否是集合 key 的成員。
5. SINTER key1 [key2] :返回給定所有集合的交集。
6. SUNION key1 [key2] :返回所有給定集合的并集。
7. SCARD key :獲取集合的成員數(shù)。
8. SDIFF key1 [key2] :返回給定所有集合的差集。
9. SRANDMEMBER key [count] :返回集合中一個(gè)或多個(gè)隨機(jī)數(shù),這個(gè)命令可以用在抽獎(jiǎng)功能中。
10. SPOP key :移除并返回集合中的一個(gè)隨機(jī)元素。
11. SDIFFSTORE destination key1 [key2] :返回給定所有集合的差集并存儲(chǔ)在 destination 中。
12. SINTERSTORE destination key1 [key2] :返回給定所有集合的交集并存儲(chǔ)在 destination 中。
Redis有序集合(SORCETED SET)命令
Redis 有序集合和集合一樣也是string類型元素的集合,而且不允許重復(fù)的成員。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)(就是下圖中的score那一列)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。下圖是有序集合的結(jié)構(gòu)。
有序集合可以用于排行榜,比如圖書排行榜。
1. ZADD key score1 member1 [score2 member2] :向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù),分?jǐn)?shù)可以重復(fù)的,該命令時(shí)間復(fù)雜度是O(logN)。
2.ZSCORE key member :返回有序集中成員的分?jǐn)?shù)值。
3.ZREM key member [member ...] :移除有序集合中的一個(gè)或多個(gè)成員。
4. ZRANK key member :返回有序集合中指定成員的索引。
5.ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] :通過分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員。
6. ZINCRBY key increment member :有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量 increment。
7.ZCARD key :獲取有序集合的成員數(shù)。
8. ZRANGE key start stop [WITHSCORES] :通過索引區(qū)間返回有序集合指定區(qū)間內(nèi)的成員。ZRANGE key 0 -1 WITHSCORES 這個(gè)是返回集合中所有的成員及分?jǐn)?shù)。
9. ZCOUNT key min max :計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)。
10. ZREMRANGEBYRANK key start stop :移除有序集合中給定的排名區(qū)間的所有成員。
11. ZREMRANGEBYSCORE key min max :移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員。
Redis常用基礎(chǔ)命令
1.啟動(dòng)redis
songguojundeMBP:server songguojun$ redis-server
3605:C 02 Nov 2019 09:28:50.673 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3605:C 02 Nov 2019 09:28:50.673 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=3605, just started
3605:C 02 Nov 2019 09:28:50.673 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
3605:M 02 Nov 2019 09:28:50.674 * Increased maximum number of open files to 10032 (it was originally set to 2560).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 3605
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
3605:M 02 Nov 2019 09:28:50.677 # Server initialized
3605:M 02 Nov 2019 09:28:50.678 * Ready to accept connections
2.查看Redis密碼
Redis密碼是寫在配置文件里的
[root@oa-dev /]# cat /opt/app/redis/etc/redis.conf | grep pass # masterauth <master-password> requirepass "redis_oatest"
也可以
127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "redis_oatest"
3.連接到服務(wù)器(要先啟動(dòng)服務(wù),上面的命令先執(zhí)行)
[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379>
查看redis信息
info命令可以顯示redis服務(wù)器的許多信息,包括服務(wù)器基本信息、CPU、內(nèi)存、持久化、客戶端連接信息等等。
127.0.0.1:6379> info
這個(gè)命令返回關(guān)于使用情況
主要字段信息下面幾個(gè)
| 字段 | 字段信息說明 |
| redis_version | redis服務(wù)器版本 |
| process_id | 服務(wù)器進(jìn)程的 PID |
| tcp_port | TCP/IP 監(jiān)聽端口 |
| config_file | /usr/local/redis/redis.conf 配置文件路徑 |
| connected_clients | 已連接客戶端的數(shù)量 |
| blocked_clients | 正在等待阻塞命令 |
| used_memory | redis分配器分配的內(nèi)存總量 |
| aof_enabled | AOF文件是否啟用 |
| total_connections_received | 運(yùn)行以來連接過的客戶端的總數(shù)量 |
| total_commands_processed | 運(yùn)行以來執(zhí)行過的命令的總數(shù)量 |
| keyspace_hits | 命中key 的次數(shù) 這個(gè)參數(shù)比較重要 |
| keyspace_misses | 沒命中key 的次數(shù) 這個(gè)參數(shù)比較重要 |
| role:master | 當(dāng)前實(shí)例的角色master還是slave |
有時(shí)候返回?cái)?shù)據(jù)比較 只想查看某塊的內(nèi)容 比如查看cup的信息
1)查看cpu信息
127.0.0.1:6379> info CPU # CPU used_cpu_sys:33.53 used_cpu_user:13.33 used_cpu_sys_children:0.30 used_cpu_user_children:0.00
2)查看內(nèi)存信息
127.0.0.1:6379> info memory # Memory used_memory:1252952 used_memory_human:1.19M used_memory_rss:3846144 used_memory_rss_human:3.67M used_memory_peak:1395424 used_memory_peak_human:1.33M used_memory_peak_perc:89.79% used_memory_overhead:937866 used_memory_startup:786696 used_memory_dataset:315086 used_memory_dataset_perc:67.58% total_system_memory:2076532736 total_system_memory_human:1.93G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:1073741824 maxmemory_human:1.00G maxmemory_policy:volatile-lru mem_fragmentation_ratio:3.07 mem_allocator:jemalloc-4.0.3 active_defrag_running:0 lazyfree_pending_objects:0
4.redis配置
Redis 的配置文件位于 Redis 安裝目錄下,文件名為 redis.conf。可以通過上面info命令可以查看到 redis.conf路徑。
redis提供了 CONFIG命令查看或設(shè)置配置項(xiàng)
127.0.0.1:6379> CONFIG SET requirepass 111111 OK 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "111111"
不過這個(gè)命令不會(huì)真正改變r(jià)edis.conf里的配置信息。因?yàn)?config set 命令可以對(duì)服務(wù)器的當(dāng)前配置進(jìn)行修改, 而修改后的配置可能和redis.conf文件中所描述的配置不一樣,使用config rewrite可以將數(shù)據(jù)同步到配置文件中。
127.0.0.1:6379> CONFIG REWRITE OK
config rewrite的作用就是通過盡可能少的修改, 將服務(wù)器當(dāng)前所使用的配置記錄到redis.conf文件中。具體可以查看官網(wǎng)http://redisdoc.com/server/config_rewrite.html
對(duì)于使用config set 有點(diǎn)需要注意的是,當(dāng)redis在運(yùn)行的時(shí)候,有些值是不能修改的,比如databases,port,會(huì)出現(xiàn)下面錯(cuò)誤提示
127.0.0.1:6379> config set port 6389 (error) ERR Unsupported CONFIG parameter: port 127.0.0.1:6379> CONFIG SET databases 17 (error) ERR Unsupported CONFIG parameter: databases
因?yàn)閿?shù)據(jù)庫(kù)的創(chuàng)建是在服務(wù)器啟動(dòng)時(shí)候讀取配置創(chuàng)建,數(shù)量必須在啟動(dòng)服務(wù)器時(shí)指定,還有端口號(hào)也是,所有在服務(wù)器運(yùn)行的過程中,嘗試使用CONFIG SET去修改數(shù)據(jù)庫(kù)的數(shù)量是不可行的。
config get * 可以獲取所有配置信息
127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "123456" 5) "masterauth" 6) "" 7) "unixsocket" 8) "" 9) "logfile" 10) "" 11) "pidfile" 12) "/var/run/redis.pid" 13) "maxmemory" 14) "0" 15) "maxmemory-samples" 16) "5" 17) "timeout" 18) "0" 19) "tcp-keepalive" ..........
5.從文件中導(dǎo)入命令
編輯redis.txt,所有的命令都被一個(gè)接一個(gè)的執(zhí)行
[root@localhost tmp]# vim redis.txt [root@localhost tmp]# cat redis.txt set username cherry set sex man [root@localhost tmp]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 < /root/tmp/redis.txt OK OK
6.運(yùn)行相同的命令N次
127.0.0.1:6379> get counter (nil) 127.0.0.1:6379> 10 incr counter (integer) 1 (integer) 2 (integer) 3 (integer) 4 (integer) 5 (integer) 6 (integer) 7 (integer) 8 (integer) 9 (integer) 10
7.判斷客戶端和服務(wù)器連接是否正常
127.0.0.1:6379> ping PONG
8.列出所有客戶端連接
127.0.0.1:6379> CLIENT LIST id=240008 addr=192.168.90.66:48113 fd=6 name= age=6412669 idle=6412669 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get id=1175856 addr=127.0.0.1:34238 fd=7 name= age=11 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
9.刪除某個(gè)鍵
127.0.0.1:6379> del Kyhome_feed_data_290 (integer) 1 127.0.0.1:6379> get Kyhome_feed_data_290 (nil)
10.批量刪除多個(gè)鍵
[root@spark78-245 new_src]# redis-cli keys Kyhome_feed_data_* 1) "Kyhome_feed_data_546" 2) "Kyhome_feed_data_725" 3) "Kyhome_feed_data_303" 4) "Kyhome_feed_data_678" 5) "Kyhome_feed_data_545" 6) "Kyhome_feed_data_1040" 7) "Kyhome_feed_data_549" 8) "Kyhome_feed_data_544" 9) "Kyhome_feed_data_775" 10) "Kyhome_feed_data_389"
查詢上面有這些鍵,然后退出當(dāng)前redis環(huán)境在執(zhí)行下面命令刪除
[root@spark78-245 new_src]# redis-cli keys Kyhome_feed_data_* | xargs redis-cli del (integer) 155 [root@spark78-245 new_src]# redis-cli keys Kyhome_feed_data_* (empty list or set)
11.創(chuàng)建當(dāng)前數(shù)據(jù)庫(kù)的備份
redis 127.0.0.1:6379> CONFIG GET dir 先查看下redis目錄 1) "dir" 2) "/usr/local/redis/rdb_dir" 在查看目錄中已經(jīng)存在dump.rdb文件 并刪除 [root@localhost ~]# ls /usr/local/redis/rdb_dir dump.rdb [root@localhost ~]# rm -f /usr/local/redis/rdb_dir/dump.rdb 執(zhí)行save命令 redis 127.0.0.1:6379> save save命令將在redis安裝目錄中創(chuàng)建dump.rdb文件 OK 執(zhí)行后查看 目錄中多了dump.rdb文件 [root@localhost ~]# ls -l /usr/local/redis/rdb_dir 總用量 40 -rw-r--r-- 1 root root 40103 6月 13 11:55 dump.rdb
12. Redis ping連通
redis-cli -h ip -p port ping
Redis常用操作
1. 找到Redis配置文件路徑
Linux系統(tǒng)下使用全局搜索 find / -type f -name 'redis.conf'
Redis命令時(shí)間復(fù)雜度
| 命令 | 時(shí)間復(fù)雜度 |
| keys | O(n) |
| dbsize | O(1) |
| del | O(1) |
| exists | O(1) |
| expire | O(1) |
| type | O(1) |
Redis其他命令
更多的命令使用可以查看這個(gè)地址http://doc.redisfans.com/
參考來源
http://www.redis.cn/commands/set.html
https://www.runoob.com/redis/redis-sorted-sets.html
總結(jié)
以上是生活随笔為你收集整理的【Redis】Redis常用命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史诗级增强!佳能R5更新1.60版本固件
- 下一篇: 里程碑的一步!《上古卷轴OL》玩家数破2