redis
是一種nosql
數據庫,他的數據是保存在內存中,同時redis
能夠定時把內存數據同步到磁盤,便可以將數據持久化,而且他比memcached
支持更多的數據結構(string
,list列表[隊列和棧]
,set[集合]
,sorted set[有序集合]
,hash(hash表)
)。相關參考文檔:http://redisdoc.com/index.htmljavascript
redis
中,與memcached
相比,數據不會丟失。celery
就是使用redis
做爲中間人。BBS
論壇,板塊不會常常變化的,可是每次訪問首頁都要從mysql
中獲取,能夠在redis
中緩存起來,不用每次請求數據庫。redis
實現。redis
和memcached
的比較:memcached | redis | |
---|---|---|
類型 | 純內存數據庫 | 內存磁盤同步數據庫 |
數據類型 | 在定義value時就要固定數據類型 | 不須要 |
虛擬內存 | 不支持 | 支持 |
過時策略 | 支持 | 支持 |
存儲數據安全 | 不支持 | 能夠將數據同步到dump.db中 |
災難恢復 | 不支持 | 能夠將磁盤中的數據恢復到內存中 |
分佈式 | 支持 | 主從同步 |
訂閱與發佈 | 不支持 | 支持 |
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-server
:node
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
redis
提供了兩種數據備份方式,一種是RDB
,另一種是AOF
,如下將詳細介紹這兩種備份策略:
安裝python-redis
:
pip install redis
新建一個文件好比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)
對字符串的操做:操做redis
的方法名稱,跟以前使用redis-cli
同樣,現就一些經常使用的來作個簡單介紹,示例代碼以下(承接以上的代碼):
# 添加一個值進去,而且設置過時時間爲60秒,若是不設置,則永遠不會過時 xtredis.set('username','xiaotuo',ex=60) # 獲取一個值 xtredis.get('username') # 刪除一個值 xtredis.delete('username')
對列表的操做:同字符串操做,全部方法的名稱跟使用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']
對集合的操做:
# 給集合team添加一個元素xiaotuo xtredis.sadd('team','xiaotuo') # 給集合team添加一個元素datuo xtredis.sadd('team','datuo') # 給集合team添加一個元素slice xtredis.sadd('team','slice') # 獲取集合中的全部元素 xtredis.smembers('team') > ['datuo','xiaotuo','slice'] # 無序的
對哈希(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"}
事務(管道)操做:redis
支持事務操做,也即一些操做只有統一完成,才能算完成。不然都執行失敗,用python
操做redis
也是很是簡單,示例代碼以下:
# 定義一個管道實例 pip = xtredis.pipeline()
pip = xtredis.pipeline()
pip.set('username', 'xiaomei')
pip.set('school', 'qinghua')
pip.execute()
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 Redis
的Redis
上,而後按ctrl+b
便可進入)。
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集羣我這裏部在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/