redis(nosql數據庫)

 
概述
redis是一種nosql數據庫,他的數據是保存在內存中,同時redis能夠定時把內存數據同步到磁盤,便可以將數據持久化,而且他比memcached支持更多的數據結構(string,list列表[隊列和棧],set[集合],sorted set[有序集合],hash(hash表))。用於數據不是很重要,變化快的。相關參考文檔:http://redisdoc.com/index.html
redis使用場景:
  1. 登陸會話存儲:存儲在redis中,與memcached相比,數據不會丟失。
  2. 排行榜/計數器:好比一些秀場類的項目,常常會有一些前多少名的主播排名。還有一些文章閱讀量的技術,或者新浪微博的點贊數等。
  3. 做爲消息隊列:好比celery就是使用redis做爲中間人。
  4. 當前在線人數:仍是以前的秀場例子,會顯示當前系統有多少在線人數。
  5. 一些經常使用的數據緩存:好比咱們的BBS論壇,板塊不會常常變化的,可是每次訪問首頁都要從mysql中獲取,能夠在redis中緩存起來,不用每次請求數據庫。
  6. 把前200篇文章緩存或者評論緩存:通常用戶瀏覽網站,只會瀏覽前面一部分文章或者評論,那麼能夠把前面200篇文章和對應的評論緩存起來。用戶訪問超過的,就訪問數據庫,而且之後文章超過200篇,則把以前的文章刪除。
  7. 好友關係:微博的好友關係使用redis實現。
  8. 發佈和訂閱功能:能夠用來作聊天軟件。
redismemcached的比較:
 
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
 
 存入的數據時隨機分佈在三個主節點上,三個主機數據不互通,當主機死了,備用機
會頂上去,不影響用戶使用,當主機和備用機都死了,集羣失敗
相關文章
相關標籤/搜索