redis簡介,redis數據結構中字元串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)的基礎命令 ...
redis簡介
redis是一個開源(BSD許可)的使用C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,它可以用作資料庫、緩存和消息中間件,並提供多種語言的API。從2010年3月15日起,redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
redis是一個key-value存儲系統。它支持存儲的value類型包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。為了保證效率,數據都是緩存在記憶體中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
1、安裝redis
1.1使用yum進行安裝,這裡使用的是yum源,關於如何安裝yum倉庫請參考我的https://www.cnblogs.com/caesar-id/p/10821105.html
查看阿裡源的redis版本
[root@localhost ~]# yum list redis
使用yum安裝redis,安裝過程非常簡單
[root@localhost ~]# yum install redis -y
1.2使用源碼安裝redis
我們使用yum安裝的redis版本是3.2.12,但是截至當前redis版本已經是redis-5.0.4。這裡我們就使用最新的版本進行源碼安裝。
如果你已經使用yum進行了安裝,現在想使用最新版本的redis,你最好卸載當前的redis。以免造成不必要的麻煩。
[root@localhost ~]# yum remove redis -y // 卸載yum安裝的redis
1.2.1下載redis源碼包
[root@localhost ~]# wget -P /opt/source/ http://download.redis.io/releases/redis-5.0.4.tar.gz
1.2.2解包
[root@localhost ~]# tar -zxvf /opt/source/redis-5.0.4.tar.gz -C /opt/
1.2.3安裝
[root@localhost ~]# cd /opt/redis-5.0.4/ [root@localhost redis-5.0.4]# make && make install //預設在/usr/local/bin所以就不用我們設置環境變數了
安裝後查看redis都有哪些可執行文件
[root@localhost ~]# ls /usr/local/bin/redis-* /usr/local/bin/redis-benchmark // 用於進行redis性能測試的工具 /usr/local/bin/redis-cli // redis的客戶端 /usr/local/bin/redis-check-aof // 用於修複出問題的AOF文件 /usr/local/bin/redis-sentinel // 用於集群管理 /usr/local/bin/redis-check-rdb // 用於修複出問題的dump.rdb文件 /usr/local/bin/redis-server // redis的服務端
1.3瞭解redis服務的配置文件
redis-server 可以指定配置文件來啟動服務,這裡在redis的安裝目錄下有個redis.conf模板,我們查看下模板中都有哪些配置
[root@localhost ~]# cat /opt/redis-5.0.4/redis.conf | grep -v "^#" | grep -v "^$ // 過濾掉註釋和空行 bind 127.0.0.1 // 綁定伺服器IP地址,多個使用空格進行分隔,如果不指定bind預設監聽本機所有可用的網路介面 protected-mode yes // 伺服器的安全模式 port 6379 // 伺服器的埠號 tcp-backlog 511 // TCP連接中已完成隊列(完成三次握手之後)的長度 timeout 0 // 客戶端空閑n秒後關閉連接(0表示不主動關閉連接) tcp-keepalive 300 // TCP長連接單位秒(300秒沒有活動關閉連接) daemonize no // 守護進程建議使用yes啟用守護進程,如果是no會阻塞shell視窗 supervised no // 可以通過upstart和systemd管理Redis守護進程,這個參數是和具體的操作系統相關的 pidfile /var/run/redis_6379.pid loglevel notice // 日誌級別。可選項有:debug(記錄大量日誌信息,適用於開發、測試階段); verbose(較多日誌信息); notice(適量日誌信息,使用於生產環境);warning(僅有部分重要、關鍵信息才會被記錄)。 logfile "" // 日誌文件的位置,當指定為空字元串時,為標準輸出,如果redis已守護進程模式運行,那麼日誌將會輸出到 /dev/null 。 databases 16 // 設置資料庫的數目 always-show-logo yes save 900 1 // 保存數據到磁碟。格式是:save <seconds> <changes> ,含義是在 seconds 秒之後至少有 changes個keys 發生改變則保存一次 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes // 預設情況下,如果 redis 最後一次的後臺保存失敗,redis 將停止接受寫操作,這樣以一種強硬的方式讓用戶知道數據不能正確的持久化到磁碟, 否則就會沒人註意到災難的發生。 如果後臺保存進程重新啟動工作了,redis 也將自動的允許寫操作。然而你要是安裝了靠譜的監控,你可能不希望 redis 這樣做,那你就改成 no 好了。 rdbcompression yes // 是否在dump .rdb資料庫的時候壓縮字元串,預設設置為yes。如果你想節約一些cpu資源的話,可以把它設置為no,這樣的話數據集就可能會比較大 rdbchecksum yes // 是否CRC64校驗rdb文件,會有一定的性能損失(大概10%)。 dbfilename dump.rdb // dump 的reb文件名字 dir ./ // 資料庫的工作目錄 replica-serve-stale-data yes //#當副本失去與主伺服器的連接時,或當複製仍在進行中,副本可以以兩種不同的方式進行操作:1)如果副本服務過時數據設置為“是”(預設值),則副本將仍然答覆客戶端請求,可能包含過期數據,或者如果這是第一次同步,則數據集可能為空。 // 2)如果副本服務過時數據設置為“否”,則副本將使用對所有類型的命令執行“與正在進行的主控形狀同步”錯誤。但是,對於信息、複製、AUTH、ping、關機、複製、角色、配置,訂閱,取消訂閱,psubscribe,punsubscribe,publish,pubsub,命令、發佈、主機:和延遲。 replica-read-only yes // 設置slave是否是只讀的。從2.6版起,slave預設是只讀的 repl-diskless-sync no // 主從數據複製是否使用無硬碟複製功能。 repl-diskless-sync-delay 5 // 當啟用無盤複製時,可以配置延遲。伺服器等待,以便生成通過套接字傳輸RDB的子節點。複製品。這一點很重要,因為一旦轉移開始,就不可能服務新的副本到達,將排隊等待下一次RDB傳輸,因此伺服器等待一段時間,以便讓更多的副本到達。延遲以秒為單位指定,預設為5秒。禁用它完全設置為0秒,傳輸將儘快開始。 repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no 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 aof-use-rdb-preamble yes lua-time-limit 5000 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 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
關於redis的優化,不在本文討論範圍內,下麵我們手動創建一個配置文件來運行redis服務
1.4使用系統預設的配置文件登陸redis
[root@localhost ~]# redis-server
開啟後你會看到如下界面,shell被redis給阻塞住了。
新開一個shell,登陸redis
1.5創建自定義的redis配置文件
[root@localhost ~]# vim /opt/redis-5.0.4/myself.conf bind 192.168.10.10 // 綁定IP地址 protected-mode yes // 開啟安全模式 port 9000 // 指定伺服器埠 daemonize yes // 開啟守護進程 requirepass 123.com // 登陸密碼
1.5.1使用我們自定義的redis配置文件登陸redis伺服器
[root@localhost ~]# vim /opt/redis-5.0.4/myself.conf // 指定配置文件開啟服務
使用客戶端登陸(這裡需要註意,如果是在當前shell開啟的redis服務,這裡就必須使用絕對路徑來使用客戶端。如果是新開一個shell就不會有這樣的問題)
[root@localhost ~]# /usr/local/bin/redis-cli -p 9000 -h 192.168.10.10
至此redis服務的啟動,和登陸就到這裡吧,下麵我們來看一下redis的數據結構。
2.redis的數據結構
redis是一種高級的key:value存儲系統,其中value支持五種數據類型
字元串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
如果對Python有所瞭解相信對上面的數據類型並不會陌生。
2.1字元串string的常用命令
set // 設置key get // 獲取key append // 追加string mset // 設置多個鍵值對 mget // 獲取多個鍵值對 del // 刪除key incr // 遞增+1 decr // 遞減-1
2.2list類型的常用命令
lpush // 從列表左邊插 rpush // 從列表右邊插 lrange // 獲取一定長度的元素 lrange key start stop ltrim // 截取一定長度列表 lpop // 刪除最左邊一個元素 rpop // 刪除最右邊一個元素 lpushx/rpushx // key存在則添加值,不存在不處理
2.3set類型的常用命令
sadd // 添加元素 srem // 刪除元素 sismember // 判斷是否為set的一個元素 smembers // 返回集合所有的成員 sdiff // 返回一個集合和其他集合的差異 sinter // 返回幾個集合的交集 sunion // 返回幾個集合的並集
2.4有序集合常用命令
ZADD // 添加有序集合 ZREM // 刪除有序集合中的元素 ZREVRANGE // 倒敘 ZRANGE // 正序 ZCARD // 有序集合的基數 ZSCORE // 返回成員的值 ZRANK // 返回有序集合中成員的排名
2.5哈希數據結構
hset // 設置散列值 hget // 獲取散列值 hmset // 設置多對散列值 hmget // 獲取多對散列值 hsetnx // 如果散列已經存在,則不設置(防止覆蓋key) hkeys // 返回所有keys hvals // 返回所有values hlen // 返回散列包含域(field)的數量 hdel // 刪除散列指定的域(field) hexists // 判斷是否存在
2.6redis的基礎命令
keys * // 查看所有key type key // 查看key類型 ttl key // 查看key過期剩餘時間-1表示存在,-2表示key已經不存在了 persist // 取消key的過期時間-1表示key存在,沒有過期時間 exists key // 判斷key存在存在返回1否則0 del keys // 刪除key可以刪除多個 dbsize // 計算key的數量 expire key seconds // 過期時間
好吧redis先簡單介紹到這裡吧。。。。。。。。。