溫馨提示×

溫馨提示×

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

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

redis使用指南(一)

發(fā)布時間:2020-06-30 08:27:33 來源:網(wǎng)絡 閱讀:579 作者:PowerMichael 欄目:關系型數(shù)據(jù)庫

redis使用指南

redis使用指南(一)

一、Redis簡介

 redis展開來看就是remote directory server。redis是開源的,基于內(nèi)存的數(shù)據(jù)結(jié)構存儲,可以作為數(shù)據(jù)庫,緩存系統(tǒng)或者消息隊列。它支持數(shù)據(jù)結(jié)構有字符串、列表(數(shù)組)、hashes(關聯(lián)數(shù)組)、集合、有序集合、bitmaps(位圖)、hyperloglogs、空間索引,十分的強大。redis有內(nèi)建的復制功能,支持lua腳本,LRU算法,事務,持久存儲并且支持高可用(sentinel,redis cluster)。以下是redis的特點總結(jié):

redis使用指南(一)

二、Redis安裝

 由于redis功能十分的強大,應用十分的廣泛,目前已經(jīng)被收錄到了epel倉庫,因此我們只需要將yum倉庫指向epel倉庫即可。因此這里安裝十分的簡單,直接yum install -y redis。注意我這里安裝的是redis3.2版本,目前官方最新版本為redis4。下載安裝方式十分簡單。如有想法,請戳網(wǎng)址

    https://redis.io/download

三、配置文件詳解

 通常rpm安裝的軟件包,我們可以通過如下命令查看程序相關的配置文件

[root@mysql ~]# rpm -ql redis
/etc/logrotate.d/redis
/etc/redis-sentinel.conf                             #監(jiān)控(哨兵)配置文件
/etc/redis.conf                             #主配置文件
/etc/systemd/system/redis-sentinel.service.d
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d
/etc/systemd/system/redis.service.d/limit.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli                              #redis客戶端程序
/usr/bin/redis-sentinel
/usr/bin/redis-server                              #redis服務端程序
/usr/bin/redis-shutdown
/usr/lib/systemd/system/redis-sentinel.service
/usr/lib/systemd/system/redis.service
/usr/lib/tmpfiles.d/redis.conf
/usr/share/doc/redis-3.2.3
/usr/share/doc/redis-3.2.3/00-RELEASENOTES
/usr/share/doc/redis-3.2.3/BUGS
/usr/share/doc/redis-3.2.3/CONTRIBUTING
/usr/share/doc/redis-3.2.3/MANIFESTO
/usr/share/doc/redis-3.2.3/README.md
/usr/share/licenses/redis-3.2.3
/usr/share/licenses/redis-3.2.3/COPYING
/var/lib/redis
/var/log/redis                               #redis日志文件目錄
/var/run/redis
[root@mysql ~]# grep '^##' /etc/redis.conf 
################################## INCLUDES ###################################
################################## NETWORK #####################################
################################# GENERAL #####################################
################################ SNAPSHOTTING  ################################
################################# REPLICATION #################################
################################## SECURITY ###################################
################################### LIMITS ####################################
############################## APPEND ONLY MODE ###############################
################################ LUA SCRIPTING  ###############################
################################ REDIS CLUSTER  ###############################
################################## SLOW LOG ###################################
################################ LATENCY MONITOR ##############################
############################# EVENT NOTIFICATION ##############################
############################### ADVANCED CONFIG ###############################

 grep以下可以查看redis主配置文件有哪些配置段。

 使用以下命令還可以查看主配置文件中已經(jīng)開啟了哪些服務。

[root@mysql2 ~]# cat /etc/redis.conf | grep -v '#' | sed '/^$/d' 
bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis/redis.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
 cluster-enabled yes
 cluster-config-file nodes-6379.conf
 cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

 接下來分析主配置文件/etc/redis.conf各個配置段的內(nèi)容

 3.1、INCLUDES配置段

  如果你有更好的配置模板,請放在這個配置段

# include /path/to/local.conf
# include /path/to/other.conf

 3.2、網(wǎng)絡配置段

  網(wǎng)絡配置項:

bind 127.0.0.1
#允許連接redis的客戶端IP

protected-mode no
#安全模式

port 6379
#端口

tcp-backlog 511
#后援隊列

timeout 0
#客戶端閑置時,關閉客戶端連接的超時時長,0表示不關閉

tcp-keepalive 300
#長連接超時時長
  1. 3.3、通用配置段

############################### GENERAL  #####################################
daemonize no
#默認情況下redis不以守護進程的模式運行

supervised no
#是否開啟超級監(jiān)管 

pidfile /var/run/redis/redis.pid
pid文件路徑

loglevel notice
#日志級別
 
logfile /var/log/redis/redis.log
#指定日志文件路徑
 
databases 16
#設定數(shù)據(jù)庫的數(shù)量

 3.4、快照配置段

  RDB(將內(nèi)存中的數(shù)據(jù)刷寫到磁盤),RDB對內(nèi)存做快照,不停地快照導出數(shù)據(jù),缺點:容易丟失數(shù)據(jù)

save 900 1 
#900秒有一個鍵值改變做一次快照

save 300 10
#300秒有10個鍵值改變做一次快照

save 60 10000 
#60秒有10000鍵值改變就做一次快照

stop-writes-on-bgsave-error yes
#默認情況下,如果在RDB snapshots持久化過程中出現(xiàn)問題,設置該參數(shù)后,Redis是不允許用戶進行任何更新操作

rdbcompression yes
#在導出.RDB數(shù)據(jù)庫文件的時候采用LZF壓縮字符串和對象。想節(jié)省一些CPU資源可以設置為no,但數(shù)據(jù)量可能會很大。
 
rdbchecksum yes
#RDB快照制作過程中會在文件的末尾寫入crc64的校驗值。這樣可能很好的保證數(shù)據(jù)的正確性。
代價是導致性能下降

dbfilename dump.rdb
#快照文件名
 
dir ./
#快照路徑

 3.5、主從配置相關段  

  主從配置相關的配置項,一個Master可以有多個slave主機,支持鏈式復制;Master以非阻塞方式同步數(shù)據(jù)至slave主機。

slaveof <masterip> <masterport>
#用于創(chuàng)建從服務器

# masterauth <master-password>
#主服務器認證密碼

slave-serve-stale-data yes
#當slave丟失與master端的連接,或者復制仍在處理,那么slave會有下列兩種表現(xiàn):
   yes表示,slave繼續(xù)響應客戶端的請求,盡管數(shù)據(jù)已經(jīng)不同了。
   no表示slave會返回"SYNC with master in progreee"的錯誤信息;

slave-read-only yes
#從服務器只讀

repl-diskless-sync no    
新的從節(jié)點或某較長時間未能與主節(jié)點進行同步的從節(jié)點重新與主節(jié)點通信,需要做“full synchronization",此時其同步方式有兩種style:
    Disk-backend:主節(jié)點新創(chuàng)建快照文件于磁盤中,而后將其發(fā)送給從節(jié)點;
    Diskless:主節(jié)占新創(chuàng)建快照后直接通過網(wǎng)絡套接字文件發(fā)送給從節(jié)點;為了實現(xiàn)并行復制,通常需要在復制啟動前延遲一個時間段;
  
repl-diskless-sync-delay 5
#基于網(wǎng)絡套接字同步延遲時長

repl-ping-slave-period 10
#ping從服務器的時間間隔

# repl-timeout 60
#主從復制超時時長

repl-disable-tcp-nodelay no
#默認為no,當選擇yes的時候, master會向slave發(fā)送少量的tcp packets,這樣的一個負面影響 delay slave接受數(shù)據(jù)時間,40 milliseconds 的延遲,在 高流量或者 master slave之間中間節(jié)點數(shù)很多的情況下,建議變?yōu)?nbsp;yes

# repl-backlog-size 1mb
#后援隊了的最大內(nèi)存

# repl-backlog-ttl 3600
#后援隊列的ttl時長

slave-priority 100
#當master服務掛了后,優(yōu)先級越低的slave,越有可能成為master候選人

# min-slaves-to-write 3        
#最少從節(jié)點在線時,主節(jié)點允許寫數(shù)據(jù)

# min-slaves-max-lag 10        
#從節(jié)點最多落后主節(jié)點多長時間

# slave-announce-ip 5.5.5.5     
#對外宣稱服務器的IP

# slave-announce-port 1234     
#對外宣稱服務器的端口

 3.6、安全相關配置段

#安全相關的
 
# requirepass foobared
#是否設置密碼,requirepass +密碼
 
#rename-command CONFIG ""
#重命名或禁用某些命令

 3.7、limit配置段

# maxclients 10000
#客戶端并發(fā)數(shù)量
 
# maxmemory <bytes>
#內(nèi)存限制,過期會刪除key

# maxclients 10000
 最大并發(fā)連接數(shù)
 
# maxmemory <bytes> 
最大可提供內(nèi)存

# maxmemory-policy noeviction
 內(nèi)存淘汰策略
# volatile-lru -> remove the key with an expire set using an LRU algorithm 
        基于LRU算法將過期時間的鍵做淘汰
# allkeys-lru -> remove any key according to the LRU algorithm
        基于LRU算法將所有鍵淘汰 
# volatile-random -> remove a random key with an expire set 
        隨機淘汰
# allkeys-random -> remove a random key, any key
        對所有鍵做隨機淘汰
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
        基于TTL時長淘汰
# noeviction -> don't expire at all, just return an error on write operations 
        從不淘汰,一旦內(nèi)存耗盡,報錯
默認是:# maxmemory-policy noeviction
推薦volatile-lru,volatile-ttl 
如何判斷內(nèi)存的淘汰?-->定量采樣
    # maxmemory-samples 5

 3.8、AOF模式配置段

  AOF,即 APPEND ONLY MODE,意思僅追加文件。rdis內(nèi)存中的數(shù)據(jù)默認是異步同步到磁盤的,如果發(fā)生宕機,會造成一些數(shù)據(jù)的丟失。AOF也是數(shù)據(jù)持久化的一種方式,可以提高數(shù)據(jù)的可靠性。AOF模式會記錄每次寫操作至指定的文件尾部實現(xiàn)存儲持久化;當redis重啟時,可通過重新執(zhí)行文件中的命令在內(nèi)存中重建出數(shù)據(jù)庫。默認使用fsync() 刷寫磁盤數(shù)據(jù),發(fā)生斷電,或者Redis出現(xiàn)內(nèi)部錯誤的時候最多丟失1秒數(shù)據(jù)。AOF和RDB這兩種持久化方式可以同時開啟不會發(fā)生沖突,開始AOF模式的話,Redis會把每次寫入的數(shù)據(jù)在接收后都寫入 appendonly.aof 文件。每次啟動時Redis都會把這個文件的數(shù)據(jù)讀入內(nèi)存里。

appendonly no
#是否記錄持久化日志

appendfilename "appendonly.aof"
#AOF 文件

appendfsync everysec
#每秒寫一次
#fsync() 請求操作系統(tǒng)馬上把數(shù)據(jù)寫到磁盤上
redis支持以下三種模式
    no:redis不執(zhí)行主動同步操作,而是OS進行;
    everysec:每秒一次;
    always:每語句一次,慢,但是安全;
    
no-appendfsync-on-rewrite no
#是否在后臺執(zhí)行aof重寫期間不調(diào)用fsync,默認為no,表示調(diào)用;

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#上述兩個條件同時滿足時,方會觸發(fā)重寫AOF;與上次aof文件大小相比,其增長量超過100%,且大小不少于64MB就會重寫AOF; 

aof-load-truncated yes
# redis在啟動的時候可以加載被截斷的AOF文件,默認啟用;否則可能啟動失敗
注意:持久機制本身不能取代備份;應該制訂備份策略,對redis庫定期備份;

 3.9、LUA腳本配置段

lua-time-limit 5000
#lua腳本執(zhí)行時間限制

 3.10、redis集群配置段

cluster-enabled yes
#是否開啟集群

cluster-config-file nodes-6379.conf
#集群配置文件

cluster-node-timeout 15000
#集群節(jié)點通信超時時長

 3.11、慢啟動日志配置段

  慢啟動日志用于記錄超過指定時間的查詢,但需要注意的是:運行時間不包括各種I/O時間。

例如:連接客戶端,發(fā)送響應數(shù)據(jù)等。

slowlog-log-slower-than 10000
slowlog-max-len 128
#慢查詢?nèi)罩鹃L度,這個長度沒有限制,單位為微妙,只要有足夠的內(nèi)存就行可以通過 SLOWLOG RESET 來釋放內(nèi)存

 3.12、延遲監(jiān)控配置段

latency-monitor-threshold 0

 3.13、事件通知配置段

notify-keyspace-events ""

 3.14、redis高級配置段

  配置redis的高級選項

 
hash-max-ziplist-entries 512
#每一個對應的hash能存儲的最大entries

hash-max-ziplist-value 64
#每一個對應的hash能存儲的最大value
#當有大量數(shù)據(jù)時,適合用哈希編碼但需要更多的內(nèi)存,元素數(shù)量上限不能超過給定限制。
 
list-max-ziplist-entries 512
list-max-ziplist-value 64
#與哈希相類似,list數(shù)據(jù)元素較少的情況下,可以用另一種方式來編碼從而節(jié)省大量空間。
 
set-max-intset-entries 512
#set 編碼形式為是64位無符號整型數(shù)字構成的字符串。該參數(shù)來限制這種情況下使用這種編碼的最大上限的。
 
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#和 hashes,lists 相似,為了節(jié)約空間 sorted sets 也使用特殊的編碼方式。這種編碼只適合長度和元素都符合上面限制的有序序列。
 
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
#當子進程重寫AOF文件,以下選項開啟時,AOF文件會每產(chǎn)生32M數(shù)據(jù)同步一次,這有利于避免寫入磁盤延遲。

四、redis用法簡介

 4.1、redis命令選項

  使用redis-cli -h命令可以查看redis客戶端命令的用法。選項用法其實很簡單,搞定英語應該不在話下。

[root@mysql ~]# redis-cli -h
redis-cli 3.2.3
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h <hostname>      Server hostname (default: 127.0.0.1).  
  -p <port>          Server port (default: 6379).
  -s <socket>        Server socket (overrides hostname and port).
  -a <password>      Password to use when connecting to the server.
  -r <repeat>        Execute specified command N times.
  -i <interval>      When -r is used, waits <interval> seconds per command.
                     It is possible to specify sub-second times like -i 0.1.
  -n <db>            Database number.
  -x                 Read last argument from STDIN.
  -d <delimiter>     Multi-bulk delimiter in for raw formatting (default: \n).
  -c                 Enable cluster mode (follow -ASK and -MOVED redirections).
  --raw              Use raw formatting for replies (default when STDOUT is
                     not a tty).
  --no-raw           Force formatted output even when STDOUT is not a tty.
  --csv              Output in CSV format.
  --stat             Print rolling stats about server: mem, clients, ...
  --latency          Enter a special mode continuously sampling latency.
  --latency-history  Like --latency but tracking latency changes over time.
                     Default time interval is 15 sec. Change it using -i.
  --latency-dist     Shows latency as a spectrum, requires xterm 256 colors.
                     Default time interval is 1 sec. Change it using -i.
  --lru-test <keys>  Simulate a cache workload with an 80-20 distribution.
  --slave            Simulate a slave showing commands received from the master.
  --rdb <filename>   Transfer an RDB dump from remote server to local file.
  --pipe             Transfer raw Redis protocol from stdin to server.
  --pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
                     no reply is received within <n> seconds.
                     Default timeout: 30. Use 0 to wait forever.
  --bigkeys          Sample Redis keys looking for big keys.
  --scan             List all keys using the SCAN command.
  --pattern <pat>    Useful with --scan to specify a SCAN pattern.
  --intrinsic-latency <sec> Run a test to measure intrinsic system latency.
                     The test will run for the specified amount of seconds.
  --eval <file>      Send an EVAL command using the Lua script at <file>.
  --ldb              Used with --eval enable the Redis Lua debugger.
  --ldb-sync-mode    Like --ldb but uses the synchronous Lua debugger, in
                     this mode the server is blocked and script changes are
                     are not rolled back from the server memory.
  --help             Output this help and exit.
  --version          Output version and exit.
  Examples:
  cat /etc/passwd | redis-cli -x set mypasswd
  redis-cli get mypasswd
  redis-cli -r 100 lpush mylist x
  redis-cli -r 100 -i 1 info | grep used_memory_human:
  redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
  redis-cli --scan --pattern '*:12345*'

 一些簡單命令的操作

    連接redis服務端

[root@mysql ~]# redis-cli     
127.0.0.1:6379>

    選擇第1數(shù)據(jù)庫        

127.0.0.1:6379> select 1    
OK

    選擇第15個數(shù)據(jù)庫

127.0.0.1:6379[1]> select 15   
OK
127.0.0.1:6379[15]>

    選擇第17個庫,報錯,redis默認16個庫

127.0.0.1:6379[15]> select 17
(error) ERR invalid DB index

    選擇默認庫

127.0.0.1:6379[15]> select 0 
OK

    使用幫助,查看transaction的使用,當然你按下tab鍵就可以查看其他的命令的使用

127.0.0.1:6379> help @transactions
  DISCARD -
  summary: Discard all commands issued after MULTI
  since: 2.0.0
  EXEC -
  summary: Execute all commands issued after MULTI
  since: 1.2.0
  MULTI -
  summary: Mark the start of a transaction block
  since: 1.2.0
  UNWATCH -
  summary: Forget about all watched keys
  since: 2.2.0
  WATCH key [key ...]
  summary: Watch the given keys to determine execution of the MULTI/EXEC block
  since: 2.2.0

    按下tab可切換查看不同的選項

127.0.0.1:6379> help @

    輸入命令時會自動提示輸入后面的內(nèi)容,相當?shù)姆奖?/p>

127.0.0.1:6379> set key value [EX seconds] [PX milliseconds] [NX|XX]

 4.2、redis數(shù)據(jù)類型 

 1.string 字符串

    redis String是最常用的一種數(shù)據(jù)類型,普通的key/value存儲都可以歸為此類;

foo->bar 鍵值關系

#查看string字符串相關操作命令
help @string 

#設置鍵值
127.0.0.1:6379> SET testkey 'tom'
OK

#獲取鍵值
127.0.0.1:6379> get testkey
"tom"

#追加鍵值,往后補值
127.0.0.1:6379> append testkey ' neo'
(integer) 9

#刪除鍵
127.0.0.1:6379> del testkey
(integer) 1

#獲取鍵
127.0.0.1:6379> get testkey
(nil)

#設定多個鍵值
127.0.0.1:6379> mset name 'tom' age 12
OK

#獲取多個鍵值
127.0.0.1:6379> mget name age
1) "tom"
2) "12"

#設置數(shù)值1
27.0.0.1:6379> set counts 1 
OK

#獲取數(shù)值
127.0.0.1:6379> get counts 
"1"

#減一操作
127.0.0.1:6379> decr counts
(integer) 0
127.0.0.1:6379> get counts
"0"

#加一操作
127.0.0.1:6379> incr counts
(integer) 1
127.0.0.1:6379> incr counts
(integer) 2

#獲取數(shù)值
127.0.0.1:6379> get counts
"2"

 2.list 列表

    redis list 類型其實就是每個子元素都是 string 類型的雙向鏈表,這就意味著即使你有成千上萬中元素在list中,添加一個新元素到list開頭或者結(jié)尾的操作算法時間復雜度都是O(1)。

#查看list列表相關操作命令
help @list

l:left
r:right
#在列表中追加一個值
127.0.0.1:6379> lpush mylist 'monday'
(integer) 1

#按索引查看列表中的元素,查看[0]號元素,即第一個元素
127.0.0.1:6379> lindex mylist 0
"monday"

#在列表中追加一個值
127.0.0.1:6379> lpush mylist 'sunday'
(integer) 2

#按索引查看列表中的元素
127.0.0.1:6379> lindex mylist 0
"sunday"

#按索引查看列表中的元素,查看第二個元素
127.0.0.1:6379> lindex mylist 1
"monday"

#從列表右邊追加一個值
127.0.0.1:6379> rpush mylist 'tuesday'
(integer) 3

127.0.0.1:6379> lindex mylist 2
"tuesday"

#從列表右邊刪除一個值
127.0.0.1:6379> rpop mylist
"Tuesday"

127.0.0.1:6379> lindex mylist 2 
(nil)

#獲取列表的長度
127.0.0.1:6379> llen mylist
(integer) 2

127.0.0.1:6379> lpop mylist
"sunday"

127.0.0.1:6379> llen mylist
(integer) 1

 3. hash

    redis hash是一個string類型的field和value的映射表.

#查看hash類型相關操作命令
help @hash

#設定hash鍵值為stu1,字段id,值為1
127.0.0.1:6379> hset stu1 id 1 
(integer) 1

#設定另一個hash數(shù)據(jù)
127.0.0.1:6379> hset stu1 name 'tom'
(integer) 1

127.0.0.1:6379> hset stu1 age 12
(integer) 1

#獲取hash字段中所有的值
127.0.0.1:6379> hmget stu1 id name age 
1) "1"
2) "tom"
3) "12"

#獲取hash中所有的值
127.0.0.1:6379> hvals stu1
1) "1"
2) "tom"
3) "12"

#獲取hash中所有的字段
127.0.0.1:6379> hkeys stu1
1) "id"
2) "name"
3) "age"

#獲取hash中所有字段及對應的值
127.0.0.1:6379> hgetall stu1
1) "id"
2) "1"
3) "name"
4) "tom"
5) "age"
6) "12"

 4 set 集合

    redis的set是string類型的無序集合。

#查看set數(shù)據(jù)類型相關的操作命令
127.0.0.1:6379> help @set

#在students集合中添加多個成員
127.0.0.1:6379> sadd students 'tom' 'jerry' 'lili'
(integer) 3

#在teachers集合中添加多個成員
127.0.0.1:6379> sadd teachers 'sam' 'jerry'
(integer) 2

#將 students集合中的‘lili’移到teachers集合
127.0.0.1:6379> smove students teachers 'lili'
(integer) 1

#獲取集合中所有的成員
127.0.0.1:6379> smembers students
1) "tom"
2) "jerry"


127.0.0.1:6379> smembers teachers
1) "lili"
2) "sam"
3) "jerry"

#獲取兩個集合的交集
127.0.0.1:6379> sinter students teachers 
1) "jerry"

#獲取兩個集合的并集
127.0.0.1:6379> sunion students teachers
1) "lili"
2) "tom"
3) "sam"
4) "jerry"

#students集合中有那些成員teachers集合不存在
127.0.0.1:6379> sdiff students teachers 
1) "tom"

#和上面相反
127.0.0.1:6379> sdiff teachers students
1) "lili"
2) "sam"

#隨機刪除集合中的一個成員
127.0.0.1:6379> spop students 1 
1) "tom"

#刪除一個成員
127.0.0.1:6379> srem students 'tom'
(integer) 0

 5 sorted set 有序集合

    redis的sorted set是string類型的有序集合。

#獲取有序集合數(shù)據(jù)類型相關的操作命令用法
127.0.0.1:6379> help @sorted_set

#有序添加stus集合的成員
127.0.0.1:6379> zadd stus 1 'tom' 2 'jerry' 3 'lucy' 
(integer) 3

#有序添加teas集合的成員
127.0.0.1:6379> zadd teas 1 'sam' 2 'jerry' 3 'lili'
(integer) 3

#獲取有序集合成員的個數(shù)
127.0.0.1:6379> zcard teas
(integer) 3

#同上
127.0.0.1:6379> ZCARD stus
(integer) 3

 #獲取索引
127.0.0.1:6379> zrank teas jerry  
(integer) 1

#通過索引獲取值
127.0.0.1:6379> zrange stus 1 2 
1) "jerry"
2) "lucy"

#通過分數(shù)獲取有序集合中的對應的值
127.0.0.1:6379> ZRANGEBYSCORE stus 1 2 
1) "tom"
2) "jerry"

#添加一個有序集合
127.0.0.1:6379> ZADD ecscores 67 'tom' 33 'lili' 89 'michael' 55 'sam'
(integer) 4

#通過分數(shù)獲取有序集合中的對應的值
127.0.0.1:6379> ZRANGEBYSCORE ecscores 44 90
1) "sam"
2) "tom"
3) "michael"

 4.3、redis客戶端/服務端命令使用

 client端命令

#獲取客戶端名字,默認為空
127.0.0.1:6379> CLIENT GETNAME  
(nil)

#設置客戶端名字
127.0.0.1:6379> CLIENT SETNAME 'mysql'
OK

#設置客戶端名字
127.0.0.1:6379> CLIENT GETNAME
"mysql"

#列出客戶端
127.0.0.1:6379> CLIENT list 
id=6 addr=127.0.0.1:55374 fd=5 name= age=1619 idle=1619 flags=N db=0 sub=0 psub=0 multi
id=7 addr=127.0.0.1:55376 fd=6 name=mysql age=579 idle=0 flags=N db=0 sub=0 psub=0 mul

#暫??蛻舳?127.0.0.1:6379> CLIENT PAUSE

#殺死客戶端
127.0.0.1:6379> CLIENT KILL

#客戶端是否響應
127.0.0.1:6379> CLIENT REPLY

 server端命令

#獲取服務端詳實信息,info命令很重要,幾乎可以查看各種各樣的詳盡的信息
127.0.0.1:6379> info 
# Server 服務端信息
redis_version:3.2.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:672aed6eb816ad6c
redis_mode:standalone
os:Linux 3.10.0-514.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:9087
run_id:4788b467cdf1f8055eca00ef6bbe57b55ef20bde
tcp_port:6379
uptime_in_seconds:12596
uptime_in_days:0
hz:10
lru_clock:6928199
executable:/usr/bin/redis-server
config_
# Clients 客戶端信息 
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory 內(nèi)存信息
used_memory:834424
used_memory_human:814.87K
used_memory_rss:6094848
used_memory_rss_human:5.81M
used_memory_peak:834424
used_memory_peak_human:814.87K
total_system_memory:1023938560      #總共內(nèi)存
total_system_memory_human:976.50M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0                           #內(nèi)存無限制
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:7.30
mem_allocator:jemalloc-3.6.0
# Persistence  持久化相關信息 
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1500090506
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 統(tǒng)計數(shù)據(jù)信息,很重要     
total_connections_received:6    
total_commands_processed:82
instantaneous_ops_per_sec:0
total_net_input_bytes:3065
total_net_output_bytes:35815120
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:42
keyspace_misses:1
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:852
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:8.24 內(nèi)核空間
used_cpu_user:4.10 用戶空間
used_cpu_sys_children:0.01
used_cpu_user_children:0.00
# Cluster信息
cluster_enabled:0
# Keyspace     
db0:keys=10,expires=0,avg_ttl=0 鍵 過期時長 ttl
127.0.0.1:6379> info memory
# Memory 內(nèi)存信息

#單獨顯示CPU信息
127.0.0.1:6379> info CPU
# CPU
used_cpu_sys:8.56
used_cpu_user:4.16
used_cpu_sys_children:0.01
used_cpu_user_children:0.0

#關機命令
127.0.0.1:6379> SHUTDOWN [NOSAVE|SAVE]

#confi命令 配置服務器屬性
127.0.0.1:6379> CONFIG SET
127.0.0.1:6379> CONFIG GET 
127.0.0.1:6379> CONFIG REWRITE 
127.0.0.1:6379> CONFIG RESETSTAT

 redis的使用暫且先介紹到這里,下次我們再介紹redis的應用。



向AI問一下細節(jié)

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

AI