Redis
Redis的安裝
Redis 是 c 語言開發的。
安裝 redis 需要 c 語言的編譯環境。如果沒有 gcc 需要在線安裝。yum install gcc-c++
安裝步驟:
第一步:redis 的源碼包上傳到 linux 系統。
第二步:解壓縮 redis。
tar –zxvf redis-3.0.0.tar.gz
第三步:編譯。進入 redis 源碼目錄。make
cd redis-3.0.0 make |
第四步:安裝。make install PREFIX=/usr/local/redis
PREFIX 參數指定 redis 的安裝目錄。
Redis的配置文件conf複製修改到對應的位置
連接 redis
redis 的啓動:
第一種前端
連接redis
退出:
redis 的第二種後端啓動修改redis.conf配置文件:
因爲redis.conf不是原始的配置文件,需要我們指定使用redis.conf作爲配置文件
./redis-server ../conf/redis.conf
Redis五種數據類型
1、String:key-value(做緩存)
Redis 中所有的數據都是字符串。命令不區分大小寫,key是區分大小寫的。Redis 是單線程
的。Redis 中不適合保存內容大的數據。
get、set、
incr:加一(生成 id)
decr:減一
Keys *: 所有的 key
2、Hash:key-fields-values(做緩存)
相當於一個 key 對於一個 map,map 中還有 key-value
使用 hash 對 key 進行歸類。
Hset:向 hash 中添加內容
hset setName field value
Hkeys:查看 hash 中的 key:
Hvals:查看 hash 中的 value
Hget:從 hash 中取內容
Hgetall:查看所有的 key 和 value
Hdel:刪除 hash 中的 key
3、List:有順序可重複
Lpush:添加一個 list,從左邊開始添加
Rpush:從右邊開始添加
Lpop 彈出元素
Rpop 彈出元素
4、Set:元素無順序,不能重複
Srem:刪除元素
還有集合運算命令,自學。
sdiff: 差集
sinter:交集
sunion:並集
5、SortedSet(zset):有順序,不能重複
Key 命令
設置 key 的過期時間。
Expire key second:設置 key 的過期時間
Ttl key:查看 key 的有效期
Persist key:清除 key 的過期時間。Key 持久化。
Redis的持久化方案
Redis 的所有數據都是保存到內存中的。
Rdb:快照形式,定期把內存中當前時刻的數據保存到磁盤。Redis 默認支持的持久化方案。
aof 形式:append only file。把所有對 redis 數據庫操作的命令,增刪改操作的命令。保存到
文件中。數據庫恢復時把所有的命令執行一遍即可。
在 redis.conf 配置文件中配置。
Rdb:
Aof 的配置:
兩種持久化方案同時開啓使用 aof 文件來恢復數據庫。
Redis集羣的搭建
redis-cluster 架構圖
redis-cluster 投票:容錯
架構細節:
(1)所有的 redis 節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶
寬.
(2)節點的 fail 是通過集羣中超過半數的節點檢測失效時才生效.
(3)客戶端與 redis 節點直連,不需要中間 proxy 層.客戶端不需要連接集羣所有節點,連接集羣
中任何一個可用節點即可
(4)redis-cluster 把所有的物理節點映射到[0-16383]slot上,cluster 負責維護
node<->slot<->value
Redis 集羣中內置了 16384 個哈希槽,當需要在Redis 集羣中放置一個 key-value 時,
redis 先對 key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,這樣每個
key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈
希槽映射到不同的節點
Redis 集羣的搭建
Redis 集羣中至少應該有三個節點。要保證集羣的高可用,需要每個節點有一個備份機。
Redis 集羣至少需要 6 臺服務器。
搭建僞分佈式。可以使用一臺虛擬機運行 6 個 redis 實例。需要修改 redis 的端口號 7001-7006
集羣搭建環境
1、使用 ruby 腳本搭建集羣。需要ruby 的運行環境。
安裝 ruby
yum install ruby
yum install rubygems
2、安裝 ruby 腳本運行使用的包。
將 redis-3.0.0.gem.tar.gz 上傳到根目錄
安裝
gem install redis-3.0.0.gem
創建redis-cluster文件
複製腳本
複製redis
注意:複製的redis必須是最原始的,裏面不許有數據
修改redis7001、redis7002、redis7003、redis7004、redis7005、redis7006的端口號以及取消註釋允許搭建集羣
啓動:
cd redis7001/bin ./redis-server ../conf/redis.conf cd ../../ cd redis7002/bin ./redis-server ../conf/redis.conf cd ../../ cd redis7003/bin ./redis-server ../conf/redis.conf cd ../../ cd redis7004/bin ./redis-server ../conf/redis.conf cd ../../ cd redis7004/bin ./redis-server ../conf/redis.conf cd ../../ cd redis7006/bin ./redis-server ../conf/redis.conf cd ../../
|
創建批量關閉
cd redis7001/bin ./redis-cli -p 7001 shutdown ./redis-cli -p 7002 shutdown ./redis-cli -p 7003 shutdown ./redis-cli -p 7004 shutdown ./redis-cli -p 7005 shutdown ./redis-cli -p 7006 shutdown cd ../../ |
使用ruby腳本搭建集羣
./redis-trib.rb create --replicas 1 192.168.243.137:7001 192.168.243.137:7002 192.168.243.137:7003 192.168.243.137:7004 192.168.243.137:7005 192.168.243.137:7006 |
集羣使用的方法
cd redis7001/bin ./redis-cli -p 7001 –c |
解釋:./redis-cli -p 7001 –c 通過端口號7001的redis連接集羣裏的所有redis
./redis-cli -p 7001
通過端口號7001的redis
–c
集羣裏的所有的redis
Eclipse操作jedis
使用工具類
Jedis與spring整合
<!-- 配置單機版的jiedis --> <bean id="jedisClientPool" class="com.igeek.common.util.jedis.JedisClientPool"/>
<!-- 配置一個jedisPool對象 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="6379"/> </bean> <!-- 配置集羣版的jedis --> <bean id="jedisClientCluster" class="com.igeek.common.util.jedis.JedisClientCluster"/> <!-- 配置一個jedisCluster對象 --> <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg name="nodes"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="7001"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="7002"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="7003"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="7004"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="7005"/> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg name="host" value="192.168.8.111"/> <constructor-arg name="port" value="7006"/> </bean> </set> </constructor-arg> </bean> |