標籤:
/** * 這裡是我的虛擬機器相關的啟動命令
- /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
- /usr/local/redis/bin/redis-cli -a redis
- vi /usr/local/redis/etc/redis.conf
*/最前面,說一下我在寫java代碼整合redis遇到的問題,一直提示Connection refused: connect,後來查看redis-conf檔案,看到有一個protected-mode,原本是yes,改為no,重啟服務就可以了。 redis安裝(以下均是在centos版本上的操作)下載好redis-x.x.tar.gz
tar xzf redis-3.2.0.tar.gzcd redis-3.2.0make
make之前要安裝gcc,yum install gcc
啟動
src/redis-server
開啟用戶端
src/redis-cli
測試
redis> set foo barOKredis> get foo"bar"
指定設定檔啟動(在此我把設定檔移動到了/usr/local/redis/etc/redis.conf)
命令:./redis-server /usr/local/redis/etc/redis.conf
(我本機啟動命令/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf),查看服務是否啟動: ps -ef | grep redis,netstat -tunpl | grep 6379
開啟用戶端:/usr/local/redis/bin/redis-cli
為了讓其在後台運行,不佔用session,將設定檔中的daemonize改為yes
--方法見官網文檔(做了一點常用的方法的筆記)
string資料類型:
setnx : nx代表not exit,如果key已經存在返回0,不存在返回1。setnx name xgw
setex : 指定索引值的有效時間 set name 10 123 有效時間為10秒
.............
hashes類型:比較適合用於儲存物件,相對於每個欄位儲存為一個String類型,將一個Object Storage Service在hash類型中會佔用更少的記憶體,並更方便的儲存整個對象。
hset user name xgw 返回0表示失敗,返回1表示成功
hget user name
.............
list類型:key為list
lpush list hello 返回list長度
lpush list world
lrange list 0 -1 展示所有的list中內容
.............
set類型:它是String類型的無序集合,set通過hash table實現
sadd myset hello 返回myset長度,添加相同元素時候返回0
smembers myset 展示set中所有內容
sorted sets
zadd myset3 1 a
(integer) 1
127.0.0.1:6379> zadd myset3 2 b
(integer) 1
127.0.0.1:6379> zadd myset3 3 b
(integer) 0
127.0.0.1:6379> zrange myset3 0 -1 withscores
.............
string 最簡單的資料類型
hash資料類型,可以當做表,hash table ,比string速度快
list資料類型 棧,隊列
set資料類型 並集,交集,差集
zset資料類型 set的升級版,有序集合
===================================
keys my* ,返回所有滿足給定pattern的所有key
exists key ,確認key是否存在
expire key ,設定key的到期時間(查看key還有多少秒到期,ttl)
persist key ,移除到期時間
del key ,刪除一個key
move key 1 (預設有0-15資料庫,預設進入0資料庫)
type key ,查看key類型(string,zset(有序集合),list,...)
dbsize ,當前資料庫key大小
info ,查看redis伺服器資訊
config get ,相關配置參數
flushdb ,清除當前資料庫下的key
flushall ,清除所有資料庫中的所有key
安全性:
在redis-conf下面配置requirepass password,在用用戶端串連的時候,帶上參數-a password串連,否則會提示沒有許可權
主從複製:
- 一個master可以有多個slave
- 多個slave可以串連同一個master外,還可以串連到其他slave(slave之間可以串連)(心跳感應,在master宕機後,一個slave馬上變成master)
- 主從複製不會阻塞master,在同步資料時,master可以繼續處理client請求
- 提供系統的伸縮性
主從複製過程:
- slave與master建立串連,發送sync同步命令
- master會啟動一個後台進程,將資料庫快照集儲存到檔案中,同時master主進程會開始收集新的寫命令並緩衝
- 後台完成儲存後,就將此檔案發送給slave
- slave將此檔案儲存到硬碟上
配置主從伺服器:配置slave伺服器很簡單,只需要在slave的設定檔中加入以下配置:slaveof 192.168.111.138 6379 #<-指定master的ip和連接埠masterauth redis #<-這是主機的密碼判斷主從機通過info來觀察:role:slave,master_link_status:up在此遇到問題:
master_link_status:up,而我的從機上面顯示down,修改redis-conf中的protected-mode為no即可
交易管理:multi開啟事務exec 執行隊列中的命令discard 清空事務的命令隊列並退出事務上下文=>交易回復樂觀鎖複雜事務控制樂觀鎖是基於資料版本(version)的記錄機制實現的。watch命令會監視給定的key,當exec時候,如果監視的key從watch後發生過變化,則整個事務會失敗,業可以調用watch多次監視多個key,這樣就可以對指定的key加樂觀鎖了,watch的key是對整個串連有效,事務也是一樣。如果瞭解斷開,監視和事務都會被自動清除。情境(session1中watch key,然後multi,接著在session2中set key,再回到session1中去set key,執行exec,執行失敗)(redis中,如果隊列中有一條執行失敗,但是執行成功的依然不會復原,這與之前就接觸的關係型資料庫就很不一樣)
持久化機制redis是一個支援持久化的記憶體資料庫,也就是說redis需要經常講記憶體中的資料同步到硬碟來保證持久化redis支援兩種持久化方式:
- snapshotting(快照),也是預設(將資料寫到二進位檔案中,預設的檔案名稱dump.rdb),可以通過配置設定自動做快照持久化的方式(配置redis在n秒內如果超過m個key被修改就自動做快照,目前redis.conf中預設配置了save 900 1 save 300 10 save 60 10000)
- append-only file(縮寫aof)方式(將寫,改等操作寫到檔案,redis會將每一個收到的寫命令通過write函數追加到檔案中,當redis重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建真箇資料庫的內容,OS會在核心中緩衝write做的修改,所以可能不是立即寫到磁碟上。這樣aof方式也可能丟失部分修改,可通過設定檔告訴redis,通過fsync函數強制os寫入到磁碟的時機。appendonly置為yes
- # appendfsync always //收到命令就寫入磁碟,效能最差,但是保證完全的持久化
- appendfsync everysec
- # appendfsync no//取決於OS,效能最好,但不能保證持久化的完整性
發布及訂閱訊息發布訂閱(pub/sub)是一種訊息通訊模式,主要目的是基礎訊息發行者和訊息訂閱者之間的耦合。redis作為一個pub/sub的server,在訂閱者和發行者之間起到了訊息路由的功能。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱訊息類型,redis將資訊類型成為通道(channel)。當發行者通過publish命令向redis server發送特定類型的資訊時,訂閱該資訊類型的全部client都會收到此訊息。
虛擬記憶體的使用
把暫時不經常訪問的資料存記憶體交換到磁碟中,從而騰出寶貴的記憶體空間用於其他需要訪問的資料
NOSql之redis的學習