Redis 是一個開源的、遵循 BSD 協議的、基於內存的並且目前比較流行的鍵值數據庫(key-value database),是一個非關係型數據庫, redis 提供將內存經過網絡遠程共享的一種服務,提供相似功能的還有memcache,但相比 memcache, redis 還提供了易擴展、高性能、 具有數據持久性等功能。
Redis 在高併發、低延遲環境要求比較高的環境使用量很是普遍, 目前 redis 在 DB-Engine 月排行榜https://db-engines.com/en/ranking 中一直比較靠前,並且一直是鍵值型存儲類的首位。node
Session 共享:常見於 web 集羣中的 Tomcat 或者 PHP 中多 web 服務器 session 共享
消息隊列: ELK 的日誌緩存、 部分業務的訂閱發佈系統
計數器: 訪問排行榜、商品瀏覽數等和次數相關的數值統計場景
緩存: 數據查詢、 電商網站商品信息、 新聞內容
微博/微信社交場合: 共同好友、 點贊評論等 python
在centos系統上須要基於epel源進行安裝c++
[root@centos7-5 ~]#yum install -y redis 啓動Redis服務並設置開機自啓 [root@centos7-5 ~]# systemctl start redis && systemctl enable redis Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service. 查看Redis版本 [root@centos7-5 ~]#redis-server -v Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=7897e7d0e13773f 鏈接Redis並查看版本信息 [root@centos7-5 ~]#redis-cli 127.0.0.1:6379> info Server # Server redis_version:3.2.12 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:7897e7d0e13773f redis_mode:standalone os:Linux 3.10.0-957.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.5 process_id:9524 run_id:7a985888a7f121aece265bc47aab2c611dd92e17 tcp_port:6379 uptime_in_seconds:24 uptime_in_days:0 hz:10 lru_clock:61125 executable:/usr/bin/redis-server config_file:/etc/redis.conf
官網下載Redis至服務器 [root@centos7-6 ~]#wget http://download.redis.io/releases/redis-4.0.14.tar.gz 解壓 [root@centos7-6 ~]#tar -xf redis-4.0.14.tar.gz [root@centos7-6 ~]#cd redis-4.0.14/ 安裝依賴軟件包 [root@centos7-6 redis-4.0.14]#yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed 安裝Redis [root@centos7-6 redis-4.0.14]#make PREFIX=/apps/redis install 建立redis配置文件 [root@centos7-6 redis-4.0.14]#mkdir /apps/redis/etc [root@centos7-6 redis-4.0.14]#cp redis.conf /apps/redis/etc/ 指定配置文件,啓動redis [root@centos7-6 redis-4.0.14]#/apps/redis/bin/redis-server /apps/redis/etc/redis.conf # 啓動警告 13303:M 12 Jun 20:42:10.037 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 13303:M 12 Jun 20:42:10.037 # Server initialized 13303:M 12 Jun 20:42:10.038 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 13303:M 12 Jun 20:42:10.038 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
[root@centos7-6 redis-4.0.14]#vim /etc/sysctl.conf net.core.somaxconn = 512 # backlog 參數控制的是三次握手的時候 server 端收到 client ack 確認號以後的隊列值。 vm.overcommit_memory = 1 # 0、表示內核將檢查是否有足夠的可用內存供應用進程使用;若是有足夠的可用內存,內存申請容許;不然,內存申請失敗,並把錯誤返回給應用進程。 # 一、表示內核容許分配全部的物理內存,而無論當前的內存狀態如何。 # 二、表示內核容許分配超過全部物理內存和交換空間總和的內存 [root@centos7-6 redis-4.0.14]#sysctl -p net.core.somaxconn = 512 vm.overcommit_memory = 1 # 開啓大頁內存動態分配,須要關閉讓 redis 負責內存管理。 [root@centos7-6 redis-4.0.14]#echo never > /sys/kernel/mm/transparent_hugepage/enabled 此時再次啓動Redis則不會出現警告信息
[root@centos7-6 ~]#vim /usr/lib/systemd/system/redis.service [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] #ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target
[root@centos7-6 ~]#useradd redis -s /sbin/nologin [root@centos7-6 ~]#mkdir /apps/redis/{data,logs,run} [root@centos7-6 ~]#chown redis.redis /apps/redis/ -R [root@centos7-6 ~]#ln -sv /apps/redis/bin/redis-* /usr/bin/ ‘/usr/bin/redis-benchmark’ -> ‘/apps/redis/bin/redis-benchmark’ # Redis性能測試工具 ‘/usr/bin/redis-check-aof’ -> ‘/apps/redis/bin/redis-check-aof’ # AOF文件檢查工具 ‘/usr/bin/redis-check-rdb’ -> ‘/apps/redis/bin/redis-check-rdb’ # RDB文件檢查工具 ‘/usr/bin/redis-cli’ -> ‘/apps/redis/bin/redis-cli’ # Redis客戶端工具 ‘/usr/bin/redis-sentinel’ -> ‘/apps/redis/bin/redis-sentinel’ # 哨兵,軟鏈接到server ‘/usr/bin/redis-server’ -> ‘/apps/redis/bin/redis-server’ # Redis服務端
[root@centos7-6 ~]#systemctl daemon-reload [root@centos7-6 ~]#systemctl start redis.service [root@centos7-6 ~]#ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 127.0.0.1:6379 *:* [root@centos7-6 ~]#redis-cli 127.0.0.1:6379> info Server # Server redis_version:4.0.14 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:3e5aec6afe61b942 ....
# redis-cli
# redis-cli -h HOSTNAME/IP -p PORT
# redis-cli -h HOSTNAME/IP -p PORT -a PASSWORD
#!/bin/env python import redis import time pool = redis.ConnectionPool(host="192.168.36.116", port=6379,password="") r = redis.Redis(connection_pool=pool) for i in range(100): r.set("k%d" % i,"v%d" % i) time.sleep(1) data=r.get("k%d" % i) print(data)
bind 0.0.0.0 #監聽地址, 能夠用空格隔開後多個監聽 IP protected-mode yes #redis3.2 以後加入的新特性, 在沒有設置 bind IP 和密碼的時候只容許訪問127.0.0.1:6379 port 6379 #監聽端口 tcp-backlog 511 #三次握手的時候 server 端收到 client ack 確認號以後的隊列值。 timeout 0 #客戶端和 Redis 服務端的鏈接超時時間,默認是 0,表示永不超時。 tcp-keepalive 300 #tcp 會話保持時間 daemonize no #認狀況下 redis 不是做爲守護進程運行的,若是你想讓它在後臺運行,你就把它改爲yes,當 redis 做爲守護進程運行的時候,它會寫一個 pid 到 /var/run/redis.pid 文件裏面 supervised no #和操做系統相關參數, 能夠設置經過 upstart 和 systemd 管理 Redis 守護進程, centos 7之後都使用 systemd pidfile /var/run/redis_6379.pid #pid 文件路徑 loglevel notice #日誌級別logfile "" #日誌路徑 databases 16 #設置 db 庫數量,默認 16 個庫 always-show-logo yes #在啓動 redis 時是否顯示 log save 900 1 #在 900 秒內有一個鍵內容發生更改就出就快照機制 save 300 10 save 60 10000 stop-writes-on-bgsave-error no #快照出錯時是否禁止 redis 寫入操做 rdbcompression yes #持久化到 RDB 文件時,是否壓縮, "yes"爲壓縮, "no"則反之 rdbchecksum yes #是否開啓 RC64 校驗,默認是開啓 dbfilename dump.rdb #快照文件名 dir ./ #快照文件保存路徑 replica-serve-stale-data yes #當從庫同主庫失去鏈接或者複製正在進行,從機庫有兩種運行方式: 1) 若是 replica-serve-stale-data 設置爲 yes(默認設置),從庫會繼續響應客戶端的讀請求。 2) 若是 replicaserve-stale-data 設置爲 no,除去指定的命令以外的任何請求都會返回一個錯誤"SYNC with master in progress"。 replica-read-only yes #是否設置從庫只讀 repl-diskless-sync no #是否使用 socket 方式複製數據, 目前 redis 複製提供兩種方式, disk 和 socket, 若是新的 slave 連上來或者重連的 slave 沒法部分同步,就會執行全量同步, master 會生成 rdb 文件, 有2 種方式: disk 方式是 master 建立一個新的進程把 rdb 文件保存到磁盤,再把磁盤上的 rdb 文件傳遞給 slave, socket 是 master 建立一個新的進程,直接把 rdb 文件以 socket 的方式發給 slave, disk 方式的時候,當一個 rdb 保存的過程當中,多個 slave 都能共享這個 rdb 文件, socket 的方式就是一個個 slave順序複製, 只有在磁盤速度緩慢可是網絡相對較快的狀況下才使用 socket 方式, 不然使用默認的 disk方式 repl-diskless-sync-delay 30 #diskless 複製的延遲時間, 設置 0 爲關閉, 一旦複製開始尚未結束以前,master 節點不會再接收新 slave 的複製請求, 直到下一次開始 repl-ping-slave-period 10 #slave 根據 master 指定的時間進行週期性的 PING 監測 repl-timeout 60 #複製連接超時時間,須要大於 repl-ping-slave-period, 不然會常常報超時 repl-disable-tcp-nodelay no #在 socket 模式下是否在 slave 套接字發送 SYNC 以後禁用 TCP_NODELAY,若是你選擇「yes」Redis 將使用更少的 TCP 包和帶寬來向 slaves 發送數據。可是這將使數據傳輸到 slave 上有延遲, Linux 內核的默認配置會達到 40 毫秒, 若是你選擇了 "no" 數據傳輸到 salve 的延遲將會減小但要使用更多的帶寬 repl-backlog-size 1mb #複製緩衝區大小, 只有在 slave 鏈接以後才分配內存。 repl-backlog-ttl 3600 #屢次時間 master 沒有 slave 鏈接,就清空 backlog 緩衝區。 replica-priority 100 #當 master 不可用, Sentinel 會根據 slave 的優先級選舉一個 master。最低的優先級的 slave,當選 master。而配置成 0,永遠不會被選舉。requirepass foobared #設置 redis 鏈接密碼 rename-command #重命名一些高危命令 maxclients 10000 #最大鏈接客戶端 maxmemory #最大內存,單位爲 bytes 字節,8G 內存的計算方式 8(G)*1024(MB)*1024(KB)*1024(Kbyte),須要注意的是 slave 的輸出緩衝區是不計算在 maxmemory 內。 appendonly no #是否開啓 AOF 日誌記錄, 默認 redis 使用的是 rdb 方式持久化,這種方式在許多應用中已經足夠用了。可是 redis 若是中途宕機,會致使可能有幾分鐘的數據丟失,根據 save 來策略進行持久化,Append Only File 是另外一種持久化方式,能夠提供更好的持久化特性。 Redis 會把每次寫入的數據在接收後都寫入 appendonly.aof 文件,每次啓動時 Redis 都會先把這個文件的數據讀入內存裏,先忽略 RDB 文件。 appendfilename "appendonly.aof" #AOF 文件名 appendfsync everysec #aof 持久化策略的配置,no 表示不執行 fsync,由操做系統保證數據同步到磁盤,always 表示每次寫入都執行 fsync,以保證數據同步到磁盤,everysec 表示每秒執行一次 fsync,可能會致使丟失這 1s 數據。 no-appendfsync-on-rewrite no #在 aof rewrite 期間,是否對 aof 新記錄的 append 暫緩使用文件同步策略,主要考慮磁盤 IO 開支和請求阻塞時間。默認爲 no,表示"不暫緩",新的 aof 記錄仍然會被當即同步,Linux 的默認 fsync 策略是 30 秒,若是爲 yes 可能丟失 30 秒數據, 但因爲 yes 性能較好並且會避免出現阻塞所以比較推薦。 auto-aof-rewrite-percentage 100 # 當 Aof log 增加超過指定百分比例時,重寫 log file, 設置爲 0 表示不自動重寫 Aof 日誌,重寫是爲了使 aof 體積保持最小,而確保保存最完整的數據。 auto-aof-rewrite-min-size 64mb #觸發 aof rewrite 的最小文件大小 aof-load-truncated yes #是否加載因爲其餘緣由致使的末尾異常的 AOF 文件(主進程被 kill/斷電等) aof-use-rdb-preamble yes #redis4.0 新增 RDB-AOF 混合持久化格式,在開啓了這個功能以後, AOF 重寫產生的文件將同時包含 RDB 格式的內容和 AOF 格式的內容,其中 RDB 格式的內容用於記錄已有的數據,而 AOF 格式的內存則用於記錄最近發生了變化的數據,這樣 Redis 就能夠同時兼有 RDB 持久化和AOF 持久化的優勢(既可以快速地生成重寫文件,也可以在出現問題時,快速地載入數據)。 lua-time-limit 5000 #lua 腳本的最大執行時間, 單位爲毫秒 cluster-enabled yes #是否開啓集羣模式,默認是單機模式 cluster-config-file nodes-6379.conf #由 node 節點自動生成的集羣配置文件 cluster-node-timeout 15000 #集羣中 node 節點鏈接超時時間 cluster-replica-validity-factor 10 #在執行故障轉移的時候可能有些節點和 master 斷開一段時間數據比較舊, 這些節點就不適用於選舉爲 master, 超過這個時間的就不會被進行故障轉移 cluster-migration-barrier 1 #一個主節點擁有的至少正常工做的從節點, 即若是主節點的 slave 節點故障後會將多餘的從節點分配到當前主節點成爲其新的從節點。 cluster-require-full-coverage no #集羣槽位覆蓋, 若是一個主庫宕機且沒有備庫就會出現集羣槽位不全, 那麼 yes 狀況下 redis 集羣槽位驗證不全就再也不對外提供服務,而 no 則能夠繼續使用可是會出現查詢數據查不到的狀況(由於有數據丟失)。 #Slow log 是 Redis 用來記錄查詢執行時間的日誌系統, slow log 保存在內存裏面,讀寫速度很是快,所以你能夠放心地使用它,沒必要擔憂由於開啓 slow log 而損害 Redis 的速度。 slowlog-log-slower-than 10000 #以微秒爲單位的慢日誌記錄, 爲負數會禁用慢日誌, 爲 0 會記錄每一個命令操做。 slowlog-max-len 128 #記錄多少條慢日誌保存在隊列,超出後會刪除最先的, 以此滾動刪除
redis 雖然是一個內存級別的緩存程序,即 redis 是使用內存進行數據的緩存的,可是其能夠將內存的數據按照必定的策略保存到硬盤上,從而實現數據持久保存的目的, redis 支持兩種不一樣方式的數據持久化保存機制,分別是 RDB 和 AOFgit
RDB: 基於時間的快照, 只保留當前最新的一次快照, 特色是執行速度比較快,缺點是可能會丟失從上次快照到當前快照未完成之間的數據。
RDB 實現的具體過程 Redis 從主進程先 fork 出一個子進程,使用寫時複製機制,子進程將內存的數據保存爲一個臨時文件,好比 dump.rdb.temp,當數據保存完成以後再將上一次保存的 RDB 文件替換掉,而後關閉子進程,這樣能夠保存每一次作 RDB 快照的時候保存的數據都是完整的,由於直接替換 RDB文件的時候可能會出現忽然斷電等問題而致使 RDB 文件尚未保存完整就忽然關機中止保存而致使數據丟失的狀況,能夠手動將每次生成的 RDB 文件進程備份,這樣能夠最大化保存歷史數據。web
優勢:redis
缺點: 數據庫
AOF:按照操做順序依次將操做添加到指定的日誌文件當中,特色是數據安全性相對較高, 缺點是即便有些操做是重複的也會所有記錄。
AOF 和 RDB 同樣使用了寫時複製機制, AOF 默認爲每秒鐘 fsync 一次,即將執行的命令保存到 AOF 文件當中,這樣即便 redis 服務器發生故障的話頂多也就丟失 1 秒鐘以內的數據,也能夠設置不一樣的 fsync策略,或者設置每次執行命令的時候執行 fsync, fsync 會在後臺執行線程,因此主線程能夠繼續處理用戶的正常請求而不受到寫入 AOF 文件的 IO 影響。編程
AOF 的文件大小要大於 RDB 格式的文件
根據所使用的 fsync 策略(fsync 是同步內存中 redis 全部已經修改的文件到存儲設備),默認是appendfsync everysec 即每秒執行一次 fsyncvim
字符串是全部編程語言中最多見的和最經常使用的數據類型,並且也是 redis 最基本的數據類型之一,並且 redis 中全部的 key 的類型都是字符串。centos
127.0.0.1:6379> SET key1 value1 # 添加一個key OK 127.0.0.1:6379> GET key1 # 獲取一個key的內容 "value1" 127.0.0.1:6379> TYPE key1 # 查看key的類型 string 127.0.0.1:6379> SET name Darius ex 3 # 對key設置自動過時時間 OK 127.0.0.1:6379> KEYS * # 查看全部key 1) "name" 2) "key1" 127.0.0.1:6379> KEYS * # 超過設定的過時時間,自動取消預先設定的key 1) "key1"
127.0.0.1:6379> DEL key1 (integer) 1 # 刪除一個key 127.0.0.1:6379> KEYS * (empty list or set) # 空key
127.0.0.1:6379> MSET key1 value1 key2 value2 # 格式:一個key對應本身的key值 OK
127.0.0.1:6379> MGET key1 key2 1) "value1" 2) "value2"
127.0.0.1:6379> APPEND key1 append (integer) 12 127.0.0.1:6379> GET key1 "value1append"
127.0.0.1:6379> SET num 10 OK 127.0.0.1:6379> INCR num (integer) 11 127.0.0.1:6379> GET num "11" 127.0.0.1:6379> INCR num (integer) 12 127.0.0.1:6379> GET num "12"
127.0.0.1:6379> SET num 10 OK 127.0.0.1:6379> GET num "10" 127.0.0.1:6379> DECR num (integer) 9 127.0.0.1:6379> GET num "9" 127.0.0.1:6379> DECR num (integer) 8 127.0.0.1:6379> GET num "8"
(error) MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. # 此問題是因爲快照出錯時是否禁止 redis 寫入操做,不能;進行持久化引發的。須要修改配置文件中stop-writes-on-bgsave-error 爲no,從新啓動redis便可 [root@centos7-6 ~]#grep 'stop-writes-on-bgsave-error' /apps/redis/etc/redis.conf stop-writes-on-bgsave-error no [root@centos7-6 ~]#systemctl restart redis
127.0.0.1:6379> STRLEN key1 (integer) 12
列表是一個雙向可讀寫的管道, 其頭部是左側尾部是右側,一個列表最多能夠包含 2^32-1 個元素即4294967295 個元素。
127.0.0.1:6379> LPUSH list1 darius tom jhon (integer) 3 127.0.0.1:6379> TYPE list1 list
127.0.0.1:6379> LPUSH list1 a # 左追加 (integer) 4 127.0.0.1:6379> RPUSH list1 b # 右追加 (integer) 5
127.0.0.1:6379> LLEN list1 (integer) 5
127.0.0.1:6379> RPOP list1 # 最後一個 "b" 127.0.0.1:6379> LPOP list1 # 第一個 "a"
Set 是 String 類型的無序集合。集合成員是惟一的,這就意味着集合中不能出現重複的數據。
127.0.0.1:6379> SADD set1 v1 (integer) 1 127.0.0.1:6379> SADD set2 v2 v4 (integer) 2 127.0.0.1:6379> TYPE set1 set 127.0.0.1:6379> TYPE set2 set
127.0.0.1:6379> SADD set1 v2 v3 v4 (integer) 3 127.0.0.1:6379> SADD set1 v2 # 追加失敗,追加的時候不能追加已經存在的數值 (integer) 0
127.0.0.1:6379> SMEMBERS set1 1) "v4" 2) "v2" 3) "v3" 4) "v1" 127.0.0.1:6379> SMEMBERS set2 1) "v4" 2) "v2"
# 差集: 已屬於 A 而不屬於 B 的元素稱爲 A 與 B 的差(集) 127.0.0.1:6379> SDIFF set1 set2 1) "v1" 2) "v3"
# 交集: 已屬於 A 且屬於 B 的元素稱爲 A 與 B 的交(集) 127.0.0.1:6379> SINTER set1 set2 1) "v4" 2) "v2"
# 並集:已屬於 A 或屬於 B 的元素爲稱爲 A 與 B 的並(集) 127.0.0.1:6379> SUNION set1 set2 1) "v2" 2) "v1" 3) "v3" 4) "v4"
Redis 有序集合和集合同樣也是 string 類型元素的集合,且不容許重複的成員,不一樣的是每一個元素都會關聯一個 double(雙精度浮點型)類型的分數, redis 正是經過分數來爲集合中的成員進行從小到大的排序, 有序集合的成員是惟一的,但分數(score)卻能夠重複,集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是 O(1), 集合中最大的成員數爲 2^32 - 1 (4294967295, 每一個集合可存儲 40 多億個成員)。
127.0.0.1:6379> ZADD zset1 1 v1 (integer) 1 127.0.0.1:6379> ZADD zset1 2 v2 (integer) 1 127.0.0.1:6379> ZADD zset1 3 v3 (integer) 1 127.0.0.1:6379> ZADD zset1 4 v4 (integer) 1 127.0.0.1:6379> TYPE zset1 zset 127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores # 顯示指定集合內全部key和key值狀況 1) "v4" 2) "4" 3) "v3" 4) "3" 5) "v2" 6) "2" 7) "v1" 8) "1" # 示例 127.0.0.1:6379> ZADD paihangbang 20 key1 10 key2 30 key3 # 添加集合 (integer) 3 127.0.0.1:6379> ZREVRANGE paihangbang 0 -1 WITHSCORES # 顯示集合內全部key與key值,發現按照順序進行排列 1) "key3" 2) "30" 3) "key1" 4) "20" 5) "key2" 6) "10"
127.0.0.1:6379> ZADD paihangbang 20 key1 10 key2 30 key3 (integer) 3
127.0.0.1:6379> ZCARD zset1 (integer) 4 127.0.0.1:6379> ZCARD paihangbang (integer) 3
127.0.0.1:6379> ZRANGE zset1 2 3 1) "v3" 2) "v4" 127.0.0.1:6379> ZRANGE zset1 0 2 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> ZRANGE zset1 1 3 1) "v2" 2) "v3" 3) "v4"
127.0.0.1:6379> ZRANK zset1 v2 (integer) 1 127.0.0.1:6379> ZRANK zset1 v1 (integer) 0
hash 是一個 string 類型的 field 和 value 的映射表, hash 特別適合用於存儲對象,Redis 中每一個 hash 能夠存儲 232 - 1 鍵值對(40 多億)。
127.0.0.1:6379> HSET hset1 name darius age 18 (integer) 2 127.0.0.1:6379> TYPE hset1 hash
127.0.0.1:6379> HGET hset1 name "darius" 127.0.0.1:6379> HGET hset1 age "18"
127.0.0.1:6379> HDEL hset1 age (integer) 1
127.0.0.1:6379> HSET hset1 name darius age 18 (integer) 1 127.0.0.1:6379> HKEYS hset1 1) "name" 2) "age"
config 命令用於查看當前 redis 配置、以及不重啓更改 redis 配置等
# 更改最大內存 127.0.0.1:6379> CONFIG GET maxmemory 1) "maxmemory" 2) "0" 127.0.0.1:6379> CONFIG SET maxmemory 8589934592 OK 127.0.0.1:6379> CONFIG GET maxmemory 1) "maxmemory" 2) "8589934592" # 設置鏈接密碼,這隻以後當即生效,但推出當前運行環境即失效,若想長久保存還須要寫入配置文件中 127.0.0.1:6379> CONFIG GET requirepass 1) "requirepass" 2) "" 127.0.0.1:6379> CONFIG SET requirepass 123456 OK 127.0.0.1:6379> CONFIG GET requirepass (error) NOAUTH Authentication required. # 密碼生效,須輸入認證密碼方可查詢 127.0.0.1:6379> AUTH 123456 # 密碼認證 OK 127.0.0.1:6379> CONFIG GET requirepass 1) "requirepass" 2) "123456" # 獲取當前配置 127.0.0.1:6379> CONFIG GET * 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "123456" 5) "masterauth" 6) "" 7) "cluster-announce-ip" 8) "" 9) "unixsocket" 10) "" 11) "logfile" 12) "" 13) "pidfile" 14) "/var/run/redis_6379.pid" ....
顯示當前節點 redis 運行狀態信息
127.0.0.1:6379> info # Server redis_version:4.0.14 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:3e5aec6afe61b942 redis_mode:standalone os:Linux 3.10.0-957.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:4.8.5 process_id:7582 run_id:b122e141e18e7e2b129dc7dc093cf107e14f045a tcp_port:6379 uptime_in_seconds:4082 ....
切換數據庫
127.0.0.1:6379> SELECT 2 OK 127.0.0.1:6379[2]>
查看當前庫下的全部 key
127.0.0.1:6379> KEYS * 1) "paihangbang" 2) "key2" 3) "hset1" 4) "set1" 5) "zset1" 6) "key1" 7) "num" 8) "set2" 9) "list1"
手動在後臺執行 RDB 持久化操做
127.0.0.1:6379> BGSAVE Background saving started
返回當前庫下的全部 key 數量
127.0.0.1:6379> DBSIZE (integer) 9
強制清空當前庫中的全部 key
127.0.0.1:6379> FLUSHDB OK 127.0.0.1:6379> KEYS * (empty list or set)
強制清空當前 redis 服務器全部數據庫中的全部 key, 即刪除全部數據
127.0.0.1:6379> FLUSHALL OK