redis--小白博客

 

概述

redis是一種nosql數據庫,他的數據是保存在內存中,同時redis能夠定時把內存數據同步到磁盤,便可以將數據持久化,而且他比memcached支持更多的數據結構(string,list列表[隊列和棧],set[集合],sorted set[有序集合],hash(hash表))。相關參考文檔:http://redisdoc.com/index.htmljavascript

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.db中
災難恢復 不支持 能夠將磁盤中的數據恢復到內存中
分佈式 支持 主從同步
訂閱與發佈 不支持 支持

redis平常操做

1.安裝:centos7php

複製代碼
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz
yum install gcc
yum install gcc-c++
make
cp src/redis-server /usr/bin/
cp src/redis-cli /usr/bin/
複製代碼

2.啓動redis數據庫服務html

service redis start

3.中止redis數據庫服務java

service redis stop

4.鏈接上redis-servernode

redis-cli -p 6379 -h 127.0.0.1

5.添加:python

set key value
如:
set username balabala
將字符串值關聯到。若是已經持有其餘值,命令就覆寫舊值,無視其類型。而且默認的過時時間是永久,即永遠不會過時。valuekeykeyset

6.刪除:mysql

del key
  如:
del username

7.設置過時時間c++

複製代碼
expire key timeout(單位爲秒)
也能夠在設置值的時候,一同指定過時時間:

  set key value EX timeout
  或:
  setex key timeout value
複製代碼

8.查看過時時間web

ttl key
  如:
ttl username

9.查看當前redis全部的keyredis

keys *

10.列表操做

複製代碼
在列表左邊添加元素:
lpush key value
將值value插入到列表key的表頭。若是key不存在,一個空列表會被建立並執行lpush操做。當key存在但不是列表類型時,將返回一個錯誤。

在列表右邊添加元素:
rpush key value
將值value插入到列表key的表尾。若是key不存在,一個空列表會被建立並執行RPUSH操做。當key存在但不是列表類型時,返回一個錯誤。

查看列表中的元素: lrange key start stop 返回列表key中指定區間內的元素,區間以偏移量start和stop指定,若是要左邊的第一個到最後的一個lrange key 0 -1。 移除列表中的元素: 移除並返回列表key的頭元素: lpop key

移除並返回列表的尾元素: rpop key
指定返回第幾個元素: lindex key index 將返回key這個列表中,索引爲index的這個元素。 獲取列表中的元素個數: llen key
如: llen languages

刪除指定的元素: lrem key count value 如: lrem languages 0 php 根據參數 count 的值,移除列表中與參數 value 相等的元素。count的值能夠是如下幾種: count > 0:從表頭開始向表尾搜索,移除與value相等的元素,數量爲count。 count < 0:從表尾開始向表頭搜索,移除與 value相等的元素,數量爲count的絕對值。 count = 0:移除表中全部與value 相等的值。
複製代碼

 11.set集合的操做:

複製代碼
添加元素:
  sadd set value1 value2....
  如:
  sadd team xiaotuo datuo
查看元素:
  smembeers set
  如:
  smembers team
移除元素:
  srem set member...
  如:
  srem team xiaotuo datuo
查看集合中的元素個數:
  scard set
  如:
  scard team1
獲取多個集合的交集:
  sinter set1 set2
  如:
  sinter team1 team2
獲取多個集合的並集:
  sunion set1 set2
  如:
  sunion team1 team2
獲取多個集合的差集:
sdiff set1 set2
如:
sdiff team1 team2
複製代碼

12.hash,哈希操做:

複製代碼
添加一個新值:
hset key field value
如:
hset website baidu baidu.com
將哈希表key中的域field的值設爲value。
若是key不存在,一個新的哈希表被建立並進行 HSET操做。若是域 field已經存在於哈希表中,舊值將被覆蓋。


獲取哈希中的field對應的值: hget key field 如: hget website baidu

刪除field中的某個field: hdel key field 如: hdel website baidu

獲取某個哈希中全部的field和value: hgetall key 如: hgetall website

獲取某個哈希中全部的field: hkeys key 如: hkeys website

獲取某個哈希中全部的值: hvals key 如: hvals website

判斷哈希中是否存在某個field: hexists key field 如: hexists website baidu

獲取哈希中總共的鍵值對: hlen field 如: hlen website
複製代碼

12.事務操做:Redis事務能夠一次執行多個命令,事務具備如下特徵:

  • 隔離操做:事務中的全部命令都會序列化、按順序地執行,不會被其餘命令打擾。
  • 原子操做:事務中的命令要麼所有被執行,要麼所有都不執行。
  • 開啓一個事務:

multi
之後執行的全部命令,都在這個事務中執行的。

    

  • 執行事務:
exec
會將在和中的操做一併提交。multiexec
  • 取消事務:
discard
會將後的全部命令取消。multi
  • 監視一個或者多個key
watch key...
監視一個(或多個)key,若是在事務執行以前這個(或這些) key被其餘命令所改動,那麼事務將被打斷。
  • 取消全部key的監視:
unwatch

13.發佈/訂閱操做:

  • 給某個頻道發佈消息:
publish channel message
  • 訂閱某個頻道的消息:
subscribe channel

14.持久化

redis提供了兩種數據備份方式,一種是RDB,另一種是AOF,如下將詳細介紹這兩種備份策略:

 

 

Python 操做redis

  1. 安裝python-redis

    pip install redis
  2. 新建一個文件好比redis_test.py,而後初始化一個redis實例變量,而且在ubuntu虛擬機中開啓redis。好比虛擬機的ip地址爲192.168.174.130。示例代碼以下:

    # 從redis包中導入Redis類
     from redis import Redis
     # 初始化redis實例變量
     xtredis = Redis(host='192.168.174.130',port=6379)
  3. 對字符串的操做:操做redis的方法名稱,跟以前使用redis-cli同樣,現就一些經常使用的來作個簡單介紹,示例代碼以下(承接以上的代碼):

    複製代碼
    # 添加一個值進去,而且設置過時時間爲60秒,若是不設置,則永遠不會過時
     xtredis.set('username','xiaotuo',ex=60)
     # 獲取一個值
     xtredis.get('username')
     # 刪除一個值
     xtredis.delete('username')
    複製代碼
  4. 對列表的操做:同字符串操做,全部方法的名稱跟使用redis-cli操做是同樣的:

    複製代碼
    # 給languages這個列表往左邊添加一個python
     xtredis.lpush('languages','python')
     # 給languages這個列表往左邊添加一個php
     xtredis.lpush('languages','php')
     # 給languages這個列表往左邊添加一個javascript
     xtredis.lpush('languages','javascript')
    
     # 獲取languages這個列表中的全部值
     print xtredis.lrange('languages',0,-1)
     > ['javascript','php','python']
    複製代碼
  5. 對集合的操做:

    複製代碼
    # 給集合team添加一個元素xiaotuo
     xtredis.sadd('team','xiaotuo')
     # 給集合team添加一個元素datuo
     xtredis.sadd('team','datuo')
     # 給集合team添加一個元素slice
     xtredis.sadd('team','slice')
    
     # 獲取集合中的全部元素
     xtredis.smembers('team')
     > ['datuo','xiaotuo','slice'] # 無序的
    複製代碼
  6. 對哈希(hash)的操做:

    複製代碼
    # 給website這個哈希中添加baidu
     xtredis.hset('website','baidu','baidu.com')
     # 給website這個哈希中添加google
     xtredis.hset('website','google','google.com')
    
     # 獲取website這個哈希中的全部值
     print xtredis.hgetall('website')
     > {"baidu":"baidu.com","google":"google.com"}
    複製代碼
  7. 事務(管道)操做:redis支持事務操做,也即一些操做只有統一完成,才能算完成。不然都執行失敗,用python操做redis也是很是簡單,示例代碼以下:

    複製代碼
    # 定義一個管道實例
    pip = xtredis.pipeline()
    pip = xtredis.pipeline()
    pip.set('username', 'xiaomei')
    pip.set('school', 'qinghua')
    pip.execute()
    複製代碼
  8. 事務(管道)操做:redis支持事務操做,也即一些操做只有統一完成,才能算完成。不然都執行失敗,用python操做redis也是很是簡單,示例代碼以下:     
複製代碼
#訂閱
from redis import Redis
ps = xtredis.pubsub()
ps.subscribe('email')
while True:
    for item in ps.listen():
        if item['type'] == 'message':
            data = item.get('data')
            print(data.decode('utf-8'))


#發佈
from redis import Redis
xtredis = Redis(host='192.168.254.41', port=6379)
xtredis.publish('email', 'xxx@qq.com')
複製代碼

 

 

以上便展現了python-redis的一些經常使用方法,若是想深刻了解其餘的方法,能夠參考python-redis的源代碼(查看源代碼pycharm快捷鍵提示:把鼠標光標放在import RedisRedis上,而後按ctrl+b便可進入)。

 

 

redis搭建主從

1.拷貝一份redis配置文件爲slave-6380.conf

cp redis.conf slave.conf

2.編輯slave-6380.conf文件

複製代碼
vim slave-6380.conf


bind 192.168.254.41
slaveof 192.168.254.41 6379
port 6380
複製代碼

 redis集羣

複製代碼
redis集羣
redis集羣我這裏部在2個機器上


第一臺:192.168.254.41

第二臺:192.168.254.45

每一臺機器建立3個redis配置文件

第一臺機器配置:
mkdir conf
touch 7000.conf 7001.conf 7002.conf
vim 7000.conf#編輯文件而且把以下內容拷貝進去
(剩下的7001.conf和7002.conf也是如此,把一下7000改爲7001和7002便可)

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                    #數據持久化類型
第二臺機器配置
mkdir conf
touch 7003.conf 7004.conf 7005.conf
vim 7000.conf#編輯文件而且把以下內容拷貝進去
(剩下的7004.conf和7005.conf也是如此,把一下7000改爲7004和7005便可)

port 7000       #綁定端口
bind 192.168.254.45  #綁定對外鏈接提供的ip
daemonize yes           #開啓守護進程
pidfile 7000.pid          #進程文件名
cluster-enabled yes    #是不是集羣
cluster-config-file 7000_node.conf    #集羣配置文件
cluster-node-timeout 15000             #集羣鏈接超時時間
appendonly yes                    #數據持久化類型
在兩臺機器上分別執行這3個配置文件
#192.168.254.41
redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf

#192.168.254.45
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
 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/rvm8.安裝一個ruby版本
  rvm install 2.4.1

9.使用一個ruby版本
  rvm use 2.4.1

10.設置默認ruby版本

  rvm use 2.4.1 --default

11.gem install redis

12.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

複製代碼

 

 轉載自:瘋子7314

https://www.cnblogs.com/fengzi7314/

相關文章
相關標籤/搜索