1. 程式人生 > >redis配置檔案詳解,附redis 命令

redis配置檔案詳解,附redis 命令

<?xml version='1.0' encoding='UTF-8'?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache"  
    xmlns:p="http://www.springframework.org/schema/p"  
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/cache  http://www.springframework.org/schema/cache/spring-cache.xsd"  
    default-destroy-method="close" default-lazy-init="false">  
    <!-- 連線池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大連線數 -->
<property name="maxTotal" value="30" />
<!-- 最大空閒連線數 -->
<property name="maxIdle" value="10" />
<!-- 每次釋放連線的最大數目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 釋放連線的掃描間隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 連線最小空閒時間 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 連線空閒多久後釋放, 當空閒時間>該值 且 空閒連線>最大空閒連線數 時直接釋放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 獲取連線時的最大等待毫秒數,小於零:阻塞不確定的時間,預設-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在獲取連線的時候檢查有效性, 預設false -->
<property name="testOnBorrow" value="true" />
<!-- 在空閒時檢查有效性, 預設false -->
<property name="testWhileIdle" value="true" />
<!-- 連線耗盡時是否阻塞, false報異常,ture阻塞直到超時, 預設true -->
<property name="blockWhenExhausted" value="false" />
</bean>
<!-- redis叢集 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg index="0">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>
</bean>
</set>
</constructor-arg>
<constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg>
</bean>
    
  
</beans> 

redis記憶體回收策略:

http://blog.csdn.net/a_bang/article/details/52986935?locationNum=9&fps=1

http://blog.sae.sina.com.cn/archives/4045

http://www.cnblogs.com/zhangchao-letv/articles/6119313.html

檢視過期key剩餘時間ttl 

當 key 不存在時,返回 -2 。 當 key 存在但沒有設定剩餘生存時間時,返回 -1 。

# vi redis.conf

daemonize yes #是否以後臺程序執行

pidfile /var/run/redis/redis-server.pid    #pid檔案位置

port 6379#監聽埠

bind 127.0.0.1   #繫結地址,如外網需要連線,設定0.0.0.0

timeout 300     #連線超時時間,單位秒

loglevel notice  #日誌級別,分別有:

# debug :適用於開發和測試

# verbose :更詳細資訊

# notice :適用於生產環境

# warning :只記錄警告或錯誤資訊

logfile /var/log/redis/redis-server.log   #日誌檔案位置

syslog-enabled no    #是否將日誌輸出到系統日誌

databases 16#設定資料庫數量,預設資料庫為0

############### 快照方式

 ###############

save 900 1    #在900s(15m)之後,至少有1個key發生變化,則快照

save 300 10   #在300s(5m)之後,至少有10個key發生變化,則快照

save 60 10000  #在60s(1m)之後,至少有1000個key發生變化,則快照

rdbcompression yes   #dump時是否壓縮資料

dir /var/lib/redis   #資料庫(dump.rdb)檔案存放目錄

############### 主從複製 ###############

slaveof <masterip> <masterport>  #主從複製使用,用於本機redis作為slave去連線主redis

masterauth <master-password>   #當master設定密碼認證,slave用此選項指定master認證密碼

slave-serve-stale-data yes     #當slave與master之間的連線斷開或slave正在與master進行資料同步時,如果有slave請求,當設定為yes時,slave仍然響應請求,此時可能有問題,如果設定no時,slave會返回"SYNC with master in progress"錯誤資訊。但INFO和SLAVEOF命令除外。

############### 安全 ###############

requirepass pass   #配置redis連線認證密碼

############### 限制 ###############

maxclients 128#設定最大連線數,0為不限制

maxmemory <bytes>#記憶體清理策略,如果達到此值,將採取以下動作:

# volatile-lru :預設策略,只對設定過期時間的key進行LRU演算法刪除

# allkeys-lru :刪除不經常使用的key

# volatile-random :隨機刪除即將過期的key

# allkeys-random :隨機刪除一個key

# volatile-ttl :刪除即將過期的key

# noeviction :不過期,寫操作返回報錯

maxmemory-policy volatile-lru#如果達到maxmemory值,採用此策略

maxmemory-samples 3   #預設隨機選擇3個key,從中淘汰最不經常用的

############### 附加模式 ###############

appendonly no    #AOF持久化,是否記錄更新操作日誌,預設redis是非同步(快照)把資料寫入本地磁碟

appendfilename appendonly.aof  #指定更新日誌檔名

# AOF持久化三種同步策略:

# appendfsync always   #每次有資料發生變化時都會寫入appendonly.aof

# appendfsync everysec  #預設方式,每秒同步一次到appendonly.aof

# appendfsync no       #不同步,資料不會持久化

no-appendfsync-on-rewrite no   #當AOF日誌檔案即將增長到指定百分比時,redis通過呼叫BGREWRITEAOF是否自動重寫AOF日誌檔案。

############### 虛擬記憶體 ###############

vm-enabled no      #是否啟用虛擬記憶體機制,虛擬記憶體機將資料分頁存放,把很少訪問的頁放到swap上,記憶體佔用多,最好關閉虛擬記憶體

vm-swap-file /var/lib/redis/redis.swap   #虛擬記憶體檔案位置

vm-max-memory 0    #redis使用的最大記憶體上限,保護redis不會因過多使用實體記憶體影響效能

vm-page-size 32    #每個頁面的大小為32位元組

vm-pages 134217728  #設定swap檔案中頁面數量

vm-max-threads 4    #訪問swap檔案的執行緒數

############### 高階配置 ###############

hash-max-zipmap-entries 512   #雜湊表中元素(條目)總個數不超過設定數量時,採用線性緊湊格式儲存來節省空間

hash-max-zipmap-value 64     #雜湊表中每個value的長度不超過多少位元組時,採用線性緊湊格式儲存來節省空間

list-max-ziplist-entries 512  #list資料型別多少節點以下會採用去指標的緊湊儲存格式

list-max-ziplist-value 64    #list資料型別節點值大小小於多少位元組會採用緊湊儲存格式

set-max-intset-entries 512   #set資料型別內部資料如果全部是數值型,且包含多少節點以下會採用緊湊格式儲存

activerehashing yes        #是否啟用重置雜湊

總結:

1、redis提供幾種持久化機制:

 a). RDB持久化

 工作方式 :根據時間的間隔將redis中資料快照(dump)到dump.rdb檔案

 優勢 :備份恢復簡單。RDB通過子程序完成持久化工作,相對比AOF啟動效率高

 劣勢 :伺服器故障會丟失幾分鐘內的資料

 b). AOF持久化

 工作方式 :以日誌的形式記錄所有更新操作到AOF日誌檔案,在redis服務重新啟動時會讀取該日誌文 件來重新構建資料庫,以保證啟動後資料完整性。

 優勢 :AOF提供兩種同步機制,一個是fsync always每次有資料變化就同步到日誌檔案和fsync everysec每秒同步一次到日誌檔案,最大限度保證資料完整性。

 劣勢:日誌檔案相對RDB快照檔案要大的多

 AOF日誌重寫功能 :AOF日誌檔案過大,redis會自動重寫AOF日誌,append模式不斷的將更新記錄寫入到老日誌檔案中,同時redis還會建立一個新的日誌檔案用於追加後續的記錄。

 c). 同時應用AOF和RDB

 對於資料安全性高的場景,可同時使用AOF和RDB,這樣會降低效能。

 d). 無持久化

 禁用redis服務持久化功能。

2、AOF日誌檔案出錯後,修復方法 :

redis-check-aof --fix appendonly.aof  #--fix引數為修復日誌檔案,不加則對日誌檢查

3、不重啟redis從RDB持久化切換到AOF持久化 :

redis-cli> CONFIG SET appendonly yes      #啟用AOF

redis-cli> CONFIG SET save ""         #關閉RDB

執行 CONFIG GET s* 命令,伺服器就會返回所有以 s 開頭的配置引數及引數的值:

redis> CONFIG GET s*
1) "save"                       # 引數名:save
2) "900 1 300 10 60 10000"      # save 引數的值
3) "slave-serve-stale-data"     # 引數名: slave-serve-stale-data
4) "yes"                        # slave-serve-stale-data 引數的值
5) "set-max-intset-entries"     # ...
6) "512"
7) "slowlog-log-slower-than"
8) "1000"
9) "slowlog-max-len"
10) "1000"

以下內容後期整理

# 當配置中需要配置記憶體大小時,可以使用 1k, 5GB, 4M 等類似的格式,其轉換方式如下(不區分大小寫)
#
# 1k =>
1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb =>
1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024
bytes
#
# 記憶體配置大小寫是一樣的.比如 1gb 1Gb 1GB 1gB


# daemonize no 預設情況下,redis不是在後臺執行的,如果需要在後臺執行,把該項的值更改為yes
daemonize
yes


# 當redis在後臺執行的時候,Redis預設會把pid檔案放在/var/run/redis.pid,你可以配置到其他地址。
#
當執行多個redis服務時,需要指定不同的pid檔案和埠
pidfile /var/run/redis.pid


# 指定redis執行的埠,預設是6379
port 6379


# 指定redis只接收來自於該IP地址的請求,如果不進行設定,那麼將處理所有請求,
# 在生產環境中最好設定該項
# bind
127.0.0.1


# Specify the path for the unix socket that will be used to listen for
#
incoming connections. There is no default, so Redis will not listen
# on a
unix socket when not specified.
#
# unixsocket /tmp/redis.sock
#
unixsocketperm 755


# 設定客戶端連線時的超時時間,單位為秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連線
# 0是關閉此設定
timeout
0


# 指定日誌記錄級別
# Redis總共支援四個級別:debug、verbose、notice、warning,預設為verbose
#debug  記錄很多資訊,用於開發和測試
# varbose 有用的資訊,不像debug會記錄那麼多
#notice 普通的verbose,常用於生產環境
# warning 只有非常重要或者嚴重的資訊會記錄到日誌
loglevel
debug


# 配置log檔案地址
# 預設值為stdout,標準輸出,若後臺模式會輸出到/dev/null
#logfile
stdout
logfile /var/log/redis/redis.log


# To enable logging to the system logger, just set 'syslog-enabled' to
yes,
# and optionally update the other syslog parameters to suit your
needs.
# syslog-enabled no


# Specify the syslog identity.
# syslog-ident redis


# Specify the syslog facility.  Must be USER or between LOCAL0-LOCAL7.
#
syslog-facility local0


# 可用資料庫數
# 預設值為16,預設資料庫為0,資料庫範圍在0-(database-1)之間
databases 16


################################ 快照  
#################################
#
# 儲存資料到磁碟,格式如下:
#
#   save <seconds> <changes>
#
#   
指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案rdb。
#   相當於條件觸發抓取快照,這個可以多個條件配合
#   
#   
比如預設配置檔案中的設定,就設定了三個條件
#
#   save 900 1  900秒內至少有1個key被改變
#   save 30010  300秒內至少有300個key被改變
#   save 60 10000  60秒內至少有10000個key被改變


save 900 1
save 300 10
save 60 10000


# 儲存至本地資料庫時(持久化到rdb檔案)是否壓縮資料,預設為yes
rdbcompression yes


# 本地持久化資料庫檔名,預設值為dump.rdb
dbfilename dump.rdb


# 工作目錄
#
# 資料庫映象備份的檔案放置的路徑。
#
這裡的路徑跟檔名要分開配置是因為redis在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成時,
#
再把該該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。
#
#
AOF檔案也會存放在這個目錄下面
#
# 注意這裡必須制定一個目錄而不是檔案
dir ./


################################# 複製
#################################


# 主從複製. 設定該資料庫為其他資料庫的從資料庫.
#
設定當本機為slav服務時,設定master服務的IP地址及埠,在Redis啟動時,它會自動從master進行資料同步
#
# slaveof
<masterip> <masterport>


# 當master服務設定了密碼保護時(用requirepass制定的密碼)
# slave服務連線master的密碼
#
#
masterauth <master-password>




# 當從庫同主機失去連線或者複製正在進行,從機庫有兩種執行方式:
#
# 1)
如果slave-serve-stale-data設定為yes(預設設定),從庫會繼續相應客戶端的請求
#
# 2)
如果slave-serve-stale-data是指為no,出去INFO和SLAVOF命令之外的任何請求都會返回一個
#    錯誤"SYNC with
master in progress"
#
slave-serve-stale-data yes


# 從庫會按照一個時間間隔向主庫傳送PINGs.可以通過repl-ping-slave-period設定這個時間間隔,預設是10秒
#
#
repl-ping-slave-period 10


# repl-timeout 設定主庫批量資料傳輸時間或者ping回覆時間間隔,預設值是60秒
#
一定要確保repl-timeout大於repl-ping-slave-period
# repl-timeout 60


################################## 安全
###################################


# 設定客戶端連線後進行任何其他指定前需要使用的密碼。
#
警告:因為redis速度相當快,所以在一臺比較好的伺服器下,一個外部的使用者可以在一秒鐘進行150K次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
#
#
requirepass foobared


# 命令重新命名.
#
# 在一個共享環境下可以重新命名相對危險的命令。比如把CONFIG重名為一個不容易猜測的字元。
#
#
舉例:
#
# rename-command CONFIG
b840fc02d524045429941cc15f59e41cb7be6c52
#
#
如果想刪除一個命令,直接把它重新命名為一個空字元""即可,如下:
#
# rename-command CONFIG ""


################################### 約束
####################################


# 設定同一時間最大客戶端連線數,預設無限制,Redis可以同時開啟的客戶端連線數為Redis程序可以開啟的最大檔案描述符數,
# 如果設定
maxclients 0,表示不作限制。
# 當客戶端連線數到達限制時,Redis會關閉新的連線並向客戶端返回max number of clients
reached錯誤資訊
#
# maxclients 128


# 指定Redis最大記憶體限制,Redis在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis會先嚐試清除已到期或即將到期的Key
#
Redis同時也會移除空的list物件
#
#
當此方法處理後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作
#
#
注意:Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
#
#
maxmemory的設定比較適合於把redis當作於類似memcached的快取來使用,而不適合當做一個真實的DB。
#
當把Redis當做一個真實的資料庫使用的時候,記憶體使用將是一個很大的開銷
# maxmemory <bytes>


# 當記憶體達到最大值的時候Redis會選擇刪除哪些資料?有五種方式可供選擇
#
# volatile-lru ->
利用LRU演算法移除設定過過期時間的key (LRU:最近使用 Least Recently Used )
# allkeys-lru ->
利用LRU演算法移除任何key
# volatile-random -> 移除設定過過期時間的隨機key
#
allkeys->random -> remove a random key, any key
# volatile-ttl ->
移除即將過期的key(minor TTL)
# noeviction -> 不移除任何可以,只是返回一個寫錯誤
#
#
注意:對於上面的策略,如果沒有合適的key可以移除,當寫的時候Redis會返回一個錯誤
#
#       寫命令包括: set setnx
setex append
#       incr decr rpush lpush rpushx lpushx linsert lset
rpoplpush sadd
#       sinter sinterstore sunion sunionstore sdiff sdiffstore
zadd zincrby
#       zunionstore zinterstore hset hsetnx hmset hincrby incrby
decrby
#       getset mset msetnx exec sort
#
# 預設是:
#
#
maxmemory-policy volatile-lru


# LRU 和 minimal TTL 演算法都不是精準的演算法,但是相對精確的演算法(為了節省記憶體),隨意你可以選擇樣本大小進行檢測。
#
Redis預設的灰選擇3個樣本進行檢測,你可以通過maxmemory-samples進行設定
#
# maxmemory-samples
3


############################## AOF ###############################




#
預設情況下,redis會在後臺非同步的把資料庫映象備份到磁碟,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那麼將造成比較大範圍的資料丟失。
#
所以redis提供了另外一種更加高效的資料庫備份及災難恢復方式。
# 開啟appendonly模式之後,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof檔案中,當redis重新啟動時,會從該檔案恢復出之前的狀態。
#
但是這樣會造成appendonly.aof檔案過大,所以redis還支援了BGREWRITEAOF指令,對appendonly.aof 進行重新整理。
#
你可以同時開啟asynchronous dumps 和 AOF


appendonly no


# AOF檔名稱 (預設: "appendonly.aof")
# appendfilename appendonly.aof


# Redis支援三種同步AOF檔案的策略:
#
# no: 不進行同步,系統去操作 . Faster.
# always:
always表示每次有寫操作都進行同步. Slow, Safest.
# everysec: 表示對寫操作進行累積,每秒同步一次.
Compromise.
#
# 預設是"everysec",按照速度和安全折中這是最好的。
#
如果想讓Redis能更高效的執行,你也可以設定為"no",讓作業系統決定什麼時候去執行
#
或者相反想讓資料更安全你也可以設定為"always"
#
# 如果不確定就用 "everysec".


# appendfsync always
appendfsync everysec
# appendfsync no


# AOF策略設定為always或者everysec時,後臺處理程序(後臺儲存或者AOF日誌重寫)會執行大量的I/O操作
#
在某些Linux配置中會阻止過長的fsync()請求。注意現在沒有任何修復,即使fsync在另外一個執行緒進行處理
#
#
為了減緩這個問題,可以設定下面這個引數no-appendfsync-on-rewrite
#
# This means that while
another child is saving the durability of Redis is
# the same as "appendfsync
none", that in pratical terms means that it is
# possible to lost up to 30
seconds of log in the worst scenario (with the
# default Linux
settings).
#
# If you have latency problems turn this to "yes". Otherwise
leave it as
# "no" that is the safest pick from the point of view of
durability.
no-appendfsync-on-rewrite no


# Automatic rewrite of the append only file.
# AOF 自動重寫
#
當AOF檔案增長到一定大小的時候Redis能夠呼叫 BGREWRITEAOF 對日誌檔案進行重寫
#
#
它是這樣工作的:Redis會記住上次進行些日誌後文件的大小(如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定)
#
#
基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動
#
同時需要指定一個最小大小用於AOF重寫,這個用於阻止即使檔案很小但是增長幅度很大也去重寫AOF檔案的情況
# 設定 percentage
為0就關閉這個特性


auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb


################################## SLOW LOG
###################################


# Redis Slow Log 記錄超過特定執行時間的命令。執行時間不包括I/O計算比如連線客戶端,返回結果等,只是命令執行時間
#
#
可以通過兩個引數設定slow log:一個是告訴Redis執行超過多少時間被記錄的引數slowlog-log-slower-than(微妙),
#
另一個是slow log 的長度。當一個新命令被記錄的時候最早的命令將被從佇列中移除


# 下面的時間以微妙微單位,因此1000000代表一分鐘。
#
注意制定一個負數將關閉慢日誌,而設定為0將強制每個命令都會記錄
slowlog-log-slower-than 10000


# 對日誌長度沒有限制,只是要注意它會消耗記憶體
# 可以通過 SLOWLOG RESET
回收被慢日誌消耗的記憶體
slowlog-max-len 1024

 1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
    #在Shell命令列下啟動Redis客戶端工具。
    /> redis-cli
    #清空當前選擇的資料庫,以便於對後面示例的理解。
    redis 127.0.0.1:6379> flushdb
    OK
    #新增String型別的模擬資料。
    redis 127.0.0.1:6379> set mykey 2
    OK
    redis 127.0.0.1:6379> set mykey2 "hello"
    OK
    #新增Set型別的模擬資料。
    redis 127.0.0.1:6379> sadd mysetkey 1 2 3
    (integer) 3
    #新增Hash型別的模擬資料。
    redis 127.0.0.1:6379> hset mmtest username "stephen"
    (integer) 1
    #根據引數中的模式,獲取當前資料庫中符合該模式的所有key,從輸出可以看出,該命令在執行時並不區分與Key關聯的Value型別。
    redis 127.0.0.1:6379> keys my*
    1) "mysetkey"
    2) "mykey"
    3) "mykey2"
    #刪除了兩個Keys。
    redis 127.0.0.1:6379> del mykey mykey2
    (integer) 2
    #檢視一下剛剛刪除的Key是否還存在,從返回結果看,mykey確實已經刪除了。
    redis 127.0.0.1:6379> exists mykey
    (integer) 0
    #檢視一下沒有刪除的Key,以和上面的命令結果進行比較。
    redis 127.0.0.1:6379> exists mysetkey
    (integer) 1
    #將當前資料庫中的mysetkey鍵移入到ID為1的資料庫中,從結果可以看出已經移動成功。
    redis 127.0.0.1:6379> move mysetkey 1
    (integer) 1
    #開啟ID為1的資料庫。
    redis 127.0.0.1:6379> select 1
    OK
    #檢視一下剛剛移動過來的Key是否存在,從返回結果看已經存在了。
    redis 127.0.0.1:6379[1]> exists mysetkey
    (integer) 1
    #在重新開啟ID為0的預設資料庫。
    redis 127.0.0.1:6379[1]> select 0
    OK
    #檢視一下剛剛移走的Key是否已經不存在,從返回結果看已經移走。
    redis 127.0.0.1:6379> exists mysetkey
    (integer) 0
    #準備新的測試資料。    
    redis 127.0.0.1:6379> set mykey "hello"
    OK
    #將mykey改名為mykey1
    redis 127.0.0.1:6379> rename mykey mykey1
    OK
    #由於mykey已經被重新命名,再次獲取將返回nil。
    redis 127.0.0.1:6379> get mykey
    (nil)
    #通過新的鍵名獲取。
    redis 127.0.0.1:6379> get mykey1
    "hello"
    #由於mykey已經不存在了,所以返回錯誤資訊。
    redis 127.0.0.1:6379> rename mykey mykey1
    (error) ERR no such key
    #為renamenx準備測試key
    redis 127.0.0.1:6379> set oldkey "hello"
    OK
    redis 127.0.0.1:6379> set newkey "world"
    OK
    #由於newkey已經存在,因此該命令未能成功執行。
    redis 127.0.0.1:6379> renamenx oldkey newkey
    (integer) 0
    #檢視newkey的值,發現它也沒有被renamenx覆蓋。
    redis 127.0.0.1:6379> get