概述html
redis是一種nosql數據庫,他的數據是保存在內存中,同時redis能夠定時把內存數據同步到磁盤,便可以將數據持久化,而且他比memcached支持更多的數據結構(string,list列表[隊列和棧],set[集合],sorted set[有序集合],hash(hash表))。相關參考文檔:http://redisdoc.com/index.htmlmysql
redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,數據不會丟失,而且在此基礎上實現了master-slave(主從)同步。c++
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key-value存儲的不足,在部 分場合能夠對關係數據庫起到很好的補充做用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便。redis
簡而言之redis是屬於非關係型數據庫,存儲結構是:key-value,內存-磁盤的存儲方式。sql
redis使用場景:數據庫
排行版/計數器:好比一些秀場類的項目,常常會有一些前多少名的主播排名。還有一些文章閱讀量的技術,或者新浪微博的點贊數等。centos
做爲消息隊列:好比celery就是使用redis做爲中間人。緩存
當前在線人數:仍是以前的秀場例子,會顯示當前系統有多少在線人數。服務器
一些經常使用的數據緩存:好比咱們的BBS論壇,板塊不會常常變化的,可是每次訪問首頁都要從mysql中獲取,能夠在redis中緩存起來,不用每次請求數據庫。數據結構
把前200篇文章緩存或者評論緩存:通常用戶瀏覽網站,只會瀏覽前面一部分文章或者評論,那麼能夠把前面200篇文章和對應的評論緩存起來。用戶訪問超過的,就訪問數據庫,而且之後文章超過200篇,則把以前的文章刪除。
好友關係:微博的好友關係使用redis實現。
發佈和訂閱功能:能夠用來作聊天軟件。
redis和memcached的比較:
redis平常操做
yum install redis -y
使用yum安裝的redis版本是3.2的
使用 systemctl restart redis 啓動
1.安裝最新版本:centos7
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++
mv redis-5.0.0 /usr/local/redis #移動redis
cd /usr/local/redis #切換目錄
make #直接make編譯安裝
cp src/redis-server /usr/bin/ #複製文件
cp src/redis-cli /usr/bin/ #複製文件
修改配置文件
vi redis.conf
2.啓動redis數據庫服務
redis監聽的是本機的6379端口,能夠在配置文件中進行修改
[root@localhost redis]# redis-server redis.conf
ss -tnl
3.鏈接上redis-server:
redis-cli -p 6379 -h 192.168.202.6 # -h 後填寫數據庫服務器的ip
4.切換數據庫
select index
index表示填寫數字。redis的數據庫用數字表示,0表示默認數據庫,數據庫最多能夠有多少,能夠經過配置文件redis.conf調試。默認是16個 ,範圍是0-15
如:
5.添加:
set key value
如:
set name bai
將字符串值value關聯到key
若是key已經持有其餘值,
set命令就覆寫舊值,無視其類型。而且默認的過時時間是永久,即永遠不會過時。
6.查看value:
get key
如:get name
查看當前redis全部的key:
keys *
7.刪除:
del key
如:
del name
8.設置過時時間
expire key timeout(單位爲秒)
也能夠在設置值的時候,一同指定過時時間:
set key value EX timeout
或:
setex key timeout value
查看過時時間
ttl key
如:
9.列表操做
在列表左邊添加元素:
lpush key value
將值value插入到列表key的表頭。若是key不存在,一個空列表會被建立並執行lpush操做。當key存在但不是列表類型時,將返回一個錯誤。
在列表右邊添加元素:
rpush key value
將值value插入到列表key的表尾。若是key不存在,一個空列表會被建立並執行RPUSH操做。當key存在但不是列表類型時,返回一個錯誤。
查看列表中的元素:
lrange key start stop
返回列表key中指定區間內的元素,區間以偏移量start和stop指定,元素從左往右按0,1,2…的順序排,從右往左按-1,-2,-3….的順序排;若是要左邊的第一個到最後的一個lrange key 0 -1。
經過下面的實驗發現只能從左往右查不能從右往左查,(0 -1) 和(-5 -1)表示的含義是同樣的,所以那種方法簡單使用哪一種,建議使用(0 -1)
移除列表中的元素:
移除並返回列表key的頭元素:
lpop key
移除並返回列表的尾元素:
rpop key
指定返回第幾個元素:
lindex key index
將返回key這個列表中,索引爲index的這個元素。0爲第一個元素1爲第二個元素…..依此類推
獲取列表中的元素個數:
llen key
如:
刪除指定的元素:
lrem key count value
根據參數 count 的值,移除列表中與參數 value 相等的元素。count的值能夠是如下幾種:
count > 0:從表頭開始向表尾搜索,移除與value相等數量的元素,數量爲count。
count < 0:從表尾開始向表頭搜索,移除與 value相等數量的元素,數量爲count的絕對值。
count = 0:移除表中全部與value 相等的值。
10.set集合的操做:
添加元素:
sadd set value1 value2....
查看元素:
smembers set
經過上邊的實驗發現集合有去重的做用
移除元素:
srem set member...
如:可一次移除多個
查看集合中的元素個數:
scard set
如:
獲取多個集合的交集:
sinter set1 set2
如:
獲取多個集合的並集:
sunion set1 set2
如:
獲取多個集合的差集:
sdiff set1 set2
如:注意取值順序,順序不一樣可能差集不一樣
查看集合有哪些 keys *
刪除集合 del set
如:
11.hash,哈希操做:
添加一個新值:
hset key field value
如:
將哈希表key中的域field的值設爲value。
若是key不存在,一個新的哈希表被建立並進行 HSET操做。若是域 field已經存在於哈希表中,舊值將被覆蓋。
獲取哈希中的field對應的值:
hget key field
如:
刪除field中的某個field:
hdel key field
如:
獲取某個哈希中全部的field和value:
hgetall key
如:
獲取某個哈希中全部的field:
hkeys key
如:
獲取某個哈希中全部的值:
hvals key
如:
判斷哈希中是否存在某個field:
hexists key field
如:
數字1表示存在,0表示不存在
獲取哈希中總共的鍵值對:
hlen field
如:
12.事物操做:Redis事務能夠一次執行多個命令,事務具備如下特徵:
隔離操做:事務中的全部命令都會序列化、按順序地執行,不會被其餘命令打擾。
原子操做:事務中的命令要麼所有被執行,要麼所有都不執行。
開啓一個事務:
multi
之後執行的全部命令,都在這個事務中執行的。
執行事務:
exec
會將在
multi
和
exec
中的操做一併提交。
經過實驗當在終端1上開啓事務,事務提交以前2號終端是看不到的,提交後兩臺終端均可看見
取消事務:
discard
會將
multi
後的全部命令取消。
經過實驗發現取消事務後,事務中的操做,不會保存下來
監視一個或者多個key:
watch key...
監視一個(或多個)key,若是在事務執行以前這個(或這些) key被其餘命令所改動,那麼事務將被打斷。
取消全部key的監視:
unwatch
13.發佈/訂閱操做:
給某個頻道發佈消息:
publish channel message
訂閱某個頻道的消息:
subscribe channel
先訂閱頻道 在發佈