概述
redis是一種nosql數據庫,他的數據是保存在內存中,同時redis能夠定時把內存數據同步到磁盤,便可以將數據持久化,而且他比memcached支持更多的數據結構(string,list列表[隊列和棧],set[集合],sorted set[有序集合],hash(hash表))。用於數據不是很重要,變化快的。相關參考文檔:http://redisdoc.com/index.html
redis使用場景:
- 登陸會話存儲:存儲在redis中,與memcached相比,數據不會丟失。
- 排行榜/計數器:好比一些秀場類的項目,常常會有一些前多少名的主播排名。還有一些文章閱讀量的技術,或者新浪微博的點贊數等。
- 做爲消息隊列:好比celery就是使用redis做爲中間人。
- 當前在線人數:仍是以前的秀場例子,會顯示當前系統有多少在線人數。
- 一些經常使用的數據緩存:好比咱們的BBS論壇,板塊不會常常變化的,可是每次訪問首頁都要從mysql中獲取,能夠在redis中緩存起來,不用每次請求數據庫。
- 把前200篇文章緩存或者評論緩存:通常用戶瀏覽網站,只會瀏覽前面一部分文章或者評論,那麼能夠把前面200篇文章和對應的評論緩存起來。用戶訪問超過的,就訪問數據庫,而且之後文章超過200篇,則把以前的文章刪除。
- 好友關係:微博的好友關係使用redis實現。
- 發佈和訂閱功能:能夠用來作聊天軟件。
redis和memcached的比較:
|
memcached
|
redis
|
類型
|
純內存數據庫
|
內存磁盤同步數據庫
|
數據類型
|
在定義value時就要固定數據類型
|
不須要
|
虛擬內存
|
不支持
|
支持
|
過時策略
|
支持
|
支持
|
存儲數據安全
|
不支持
|
能夠將數據同步到dump.rdb中
|
災難恢復
|
不支持
|
能夠將磁盤中的數據恢復到內存中
|
分佈式
|
支持
|
主從同步
|
訂閱與發佈
|
不支持
|
支持
|
redis安裝啓動
1.安裝:centos7
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz
cd redis-5.0.0
yum install gcc
yum install gcc-c++
make && make install
cp src/redis-server /usr/bin/
cp src/redis-cli /usr/bin/
對文件備份 cp redis.conf redis.conf.bak (可省)
mv redis.conf /etc/redis.conf
vim /etc/redis.conf daemonize yes (守護進程)
啓動: redis-server /etc/redis.conf
登陸: redis-cli -p 63+79 -h 127.0.0.1 默認端口號6379
設置鍵值
設置
將字符串值value關聯到key。若是key已經持有其餘值,set命令就
覆寫舊值,無視其類型。而且默認的過時時間是永久,即永遠不會過時。鍵值對,一 一對應。
添加
|
set key value
|
刪除
|
del key
|
取值
|
get key
|
查看當前redis全部的key
|
keys *
|
設置鍵值對的過時時間
設置過時時間(已存在鍵值)
|
expire key timeout(單位爲秒)
|
在設置值的時候,一同指定過時時間
|
set key value EX timeout
setex key timeout value
|
查看過時時間
|
ttl key
|
hash,哈希操做
將哈希表key中的域field的值設爲value。
field 和value 至關於以前的鍵值對,key爲一個大的範圍
若是key不存在,一個新的哈希表被建立並進行 HSET操做。若是域 field已經存在於哈希表中,舊值將被覆蓋。(能夠理解爲學校裏的班級中的)
添加一個新值
|
hset key field value
|
刪除field中的某個field
|
hdel key field
|
獲取哈希中的field對應的值
|
hget key field
|
獲取某個哈希中全部的field
|
hkeys key
|
獲取某個哈希中全部的值
|
hvals key
|
獲取某個哈希中全部的field和value
|
hgetall key
|
獲取哈希中總共的鍵值對(總共的字段)
|
hlen key
|
判斷哈希中是否存在某個field
|
hexists key field
|
列表(list)操做 (能夠存儲重複值)
在列表左邊添加元素:將值value插入到列表key的表頭。
若是key不存在,一個空列表會被建立並執行lpush操做。當key存在但不是列表類型時,將返回一個錯誤。
|
lpush key value
|
在列表右邊添加元素:將值value插入到列表key的表尾。
若是key不存在,一個空列表會被建立並執行RPUSH操做。當key存在但不是列表類型時,返回一個錯誤。
|
rpush key value
|
查看列表中的元素:
返回列表key中指定區間內的元素,區間以偏移量start和stop指定,若是要左邊的第一個到最後的一個 0 -1 (在計算機中意味着一個循環)
從左往右數序號是從零開始數的
從右往左數序號是從-1 -2 -3 這樣數的
|
lrange key start stop
|
指定返回第幾個元素:指定取值
|
lindex key index
|
獲取列表中的元素個數:
|
llen key
|
移除並返回列表key的頭元素:從左往右取
|
lpop key
|
移除並返回列表的尾元素:從右往左取
|
rpop key
|
刪除指定的元素:
|
lrem key count value
|
根據count 的值,刪除列表中相應個數的value的元素,count的值能夠是如下幾種: count > 0:從表頭開始向表尾搜索,移除與value相等的元素,數量爲count。 count < 0:從表尾開始向表頭搜索,移除與 value相等的元素,數量爲count的絕對值。 count = 0:移除表中全部與value 相等的值。
set集合(集合沒有重複值)的操做
添加元素
|
sadd set value1 value2....
|
查看元素
|
smembers set
|
移除元素
|
srem set member...
|
查看集合中的元素個數
|
scard set
|
獲取多個集合的交集
|
sinter set1 set2
|
獲取多個集合的並集
|
sunion set1 set2
|
獲取多個集合的差集
(以最左側的set集合爲基礎進行的差集)
|
sdiff set1 set2
|
事務操做:Redis事務能夠一次執行多個命令,事務具備如下特徵:
- 隔離操做:事務中的全部命令都會序列化、按順序地執行,不會被其餘命令打擾。
- 原子操做:事務中的命令要麼所有被執行,要麼所有都不執行。
開啓一個事務:之後執行的全部命令,都在這個事務中執行的。
|
multi
|
執行事務:會將在multi和exec中的操做一併提交
|
exec
|
取消事務:回滾:會將multi後的全部命令取消。
|
discard
|
監視一個或者多個key:監視一個(或多個)key,若是在事務執行以前這個(或這些) key被其餘命令所改動,那麼事務將被打斷。
|
watch key...
|
取消全部key的監視:
|
unwatch
|
發佈/訂閱操做:
publish channel message
subscribe channel
14.持久化
redis提供了兩種數據備份方式,一種是RDB,另一種是AOF,如下將詳細介紹這兩種備份策略:vim /etc/redis.conf
redis搭建主從
1.拷貝一份redis配置文件爲slave.conf
cp redis.conf slave.conf
2.編輯slave.conf文件
vim slave.conf bind 192.168.7.100 (bind設置爲自身ip 設置成127.0.0.1不能第三方登陸) slaveof 192.168.7.100 6379 (從屬於->) port 6380 (端口需不一致)
redis-server redis.conf 啓動主
redis-server slave.conf 啓動從
注:同一臺機器搭建,端口號不能相同,須要更改端口號,不一樣機器不須要
redis集羣
redis集羣我這裏部署在一個機器上
建立6個redis配置文件
mkdir conf touch 7000.conf 7001.conf 7002.conf 7003.conf 7004.conf 7005.conf vim 7000.conf #編輯文件而且把以下內容拷貝進去 或者cp 7000.conf 700{1..5}.conf (剩下的文件也是如此,把如下端口號及相應的文件修改便可)
port 7000 #綁定端口 bind 192.168.254.41 #綁定對外鏈接提供的ip daemonize yes #開啓守護進程 pidfile 7000.pid #進程文件名 cluster-enabled yes #是不是集羣 cluster-config-file 7000_node.conf #集羣配置文件 cluster-node-timeout 15000 #集羣鏈接超時時間 appendonly yes #數據持久化類型
啓動服務 redis-server 7000.conf redis-server 7001.conf redis-server 7002.conf redis-server 7003.conf redis-server 7004.conf redis-server 7005.conf
注:redis須要的Ruby版本最低是2.2.2,可是CentOS7 yum庫中ruby的版本支持到 2.0.0,可gem 安裝redis須要最低是2.2.2,採用rvm來更新ruby:
安裝RVM(rudy version manage) 1.curl -L get.rvm.io | bash -s stable 2.find / -name rvm -print(此時可能出現問題) 3.若是報錯執行(4,5步)
4.curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - 5.curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
6.出現以下內容表明成功
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
7.使剛安裝的rvm當即生效 source /usr/local/rvm/scripts/rvm
8.安裝一個ruby版本 rvm install 2.4.1 9.使用一個ruby版本 rvm use 2.4.1 10.設置默認ruby版本 rvm use 2.4.1 --default
11.配置集羣 (尾部的1 爲redis對應的備用機)
redis-cli --cluster create 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008 --cluster-replicas 1
存入的數據時隨機分佈在三個主節點上,三個主機數據不互通,當主機死了,備用機
會頂上去,不影響用戶使用,當主機和備用機都死了,集羣失敗