1.Redis是遠程的,有客戶端和服務端,咱們通常說的是服務端;mysql
2.Redis是**
基於內存
**的,因此比基於硬盤的MySQL要快不少,但很是吃內存面試3.Redis是非關係型數據庫。本質上也是數據庫,但MySQL關係型數據庫存儲時必須定義數據詞典,而Redis則不須要。redis
Redis
數據類型都支持push/pop、add/remove
及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。sql
與Memcached
同樣,爲了保證效率,數據都是緩存在內存中。區別的是Redis
會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave
(主從)同步。數據庫
數據能夠從主服務器向任意數量的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器。這使得Redis
可執行單層樹複製。存盤能夠有意無心的對數據進行寫操做。因爲徹底實現了**發佈/訂閱
**機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操做的可擴展性和數據冗餘頗有幫助。編程
Redis
經常做爲數據緩存。數組
當某些系統接口比較慢的時候,咱們能夠把一些數據放在Redis
中緩存起來,下次取數據就不進行很是耗時的SQL
操做了,直接從緩存中取數據,提高系統性能最經常使用的方法之一;緩存
push和pop操做保證了原子性的實現;安全
全部的增刪改查都是在Redis
中進行,Redis
有硬盤的持久化機制,按期進行存儲,保證了數據的完整性和安全性。bash
查看redis
客戶端: which redis-cli
登陸:redis-cli
(默認登陸本機6379
端口) info
命令查看redis
信息
在redis
裏邊,除了\n
和空格 不能做爲名字的組成內容外,其餘內容均可以做爲key
的名字部分。名字長度不作要求。
*exists key #測試指定key是否存在 del key1 key2 key3 #刪除給定的key *type key #返回給定的value的類型 keys pattern #返回匹配指定模式的全部key rename oldkey newkey#更名字 *dbsize #返回當前數據庫的key數量 expire key seconds #爲key指定過時時間 *ttl key #返回key的剩餘過時秒數 *select db-index #選擇數據庫,一共16個 move key db-index #將key從當前數據庫移動到指定數據庫 *flushdb #刪除當前數據庫中全部key flushall #刪除全部數據庫中的全部key 複製代碼
功能:提供字符串或者整型操做。
set key value(string/int/float) get key incr string [value]//自增 decrby string [value] //自減 複製代碼
string是redis最基本的類型
redis
的string
能夠包含任何數據。包括jpg
圖片(二進制)或者序列化的對象。 單個value
值最大上限是1G
字節。 若是隻用string
類型,redis
就能夠被看做加上持久化特性的memcache
。
set key value #設置key對應的值爲string類型的value *mset key1 value1 key2 value2 #一次設置多個key的值 *mget key1 key2 #一次獲取多個key的值 *incr key #對key的值作加加操做,並返回新的值 decr key #對key的值作漸減操做,並返回新的值 incrby key integer #同incr,加指定的值 decrby key integer #同decr,減指定的值 *append key value #給指定key的字符串值追加value *substr key start end #返回截取過的key的字符串值 複製代碼
功能:存儲序列集合,可用於隊列,
push
和pop
操做
lpush 左進
rpop 右出
llen key 查看list有幾個元素
複製代碼
List
類型是先進先出,適合隊列;List不要求裏面的元素是惟一的
(一)介紹
得到最新的10個登陸用戶信息: select * from user order by logintime desc limit 10
; 以上sql語句能夠實現用戶需求,可是數據多的時候,所有數據都要受到影響,對數據庫的負載比較高。必要狀況還須要給關鍵字段(id或logintime)設置索引,索引也比較耗費系統資源。
若是經過list鏈表實現以上功能,能夠在list鏈表中只保留最新的10個數據,每進來一個新數據就刪除一箇舊數據。每次就能夠從鏈表中直接得到須要的數據。極大節省各方面資源消耗
(二)應用
list
類型其實就是一個雙向鏈表。經過push
,pop
操做從鏈表的頭部或者尾部添加刪除元素。 這使得list
既能夠用做棧,也能夠用做隊列。
上進上出 :棧 上進下出 :隊列
lpush key string #在key對應list的頭部添加字符串元素 rpop key #在list的尾部刪除元素,並返回刪除元素 llen key 返回key #對應list的長度,key不存在返回0,若是key對應類型不是list返回錯誤 lrange key start end #返回指定區間內的元素,下標從0開始 rpush key string #同上,在尾部添加 lpop key #從list的頭部刪除元素,並返回刪除元素 ltrim key start end #截取list,保留指定區間內元素 複製代碼
1.lrange key 0 -1
取出全部元素。 2.lrem key n/-n X
刪除指定元素n
次。 3.linsert key after/before key1 key2
在key1
後/前插入key2
。 4.rpoplpush key1 key2
將key1
右邊key
左入key2
鏈表,原子性。 的操做使用
功能:無序集合,
每一個元素都不同
。
添加元素:sadd key value 判斷有多少個元素:scard key 判斷某個元素是否在set裏面:sismember key value 刪除某個元素:srem key value 獲取所有值,並以數組方式返回:$redis->sMembers('dst')); int(2) array(2) { [0]=> string(1) "4" [1]=> string(1) "2" } 複製代碼
set
類型,無序的方式存儲多個不一樣的元素,對元素能夠進行快速的添加、查找和刪除;相同的元素只算一個。
redis的set是string類型的無序集合。 set元素最大能夠包含(2的32次方-1)個元素。 關於set集合類型除了基本的添加刪除操做, 其餘有用的操做還包含集合的取並集(union
),交集(intersection
), 差集(difference
)。經過這些操做能夠很容易的實現sns中的**好友推薦功能
**。 注意:每一個集合中的各個元素不能重複。
sadd key member #添加一個string元素到key對應的set集合中,成功返回1,若是元素已經在集合中,返回0,key對應的set不存在返回錯誤 srem key member [memeber] #從key對應set中移除給定元素,成功返回1 smove p1 p2 member #從p1 對應set中移除member並添加到p2對應set中 scard key #返回set的元素個數 sismember key member #判斷member是否在set中 sinter key1 key2...keyn #返回全部給定key的交集 sunion key1 key2...keyn #返回全部給定key的並集 sdiff key1 key2...keyn #返回全部給定key的差集 smembers key #返回key對應set的全部元素,結果是無序的 複製代碼
該類型應用場合:qq
好友推薦。
tom朋友圈(與某某是好友):mary jack xiaoming wang5 wang6
linken朋友圈(與某某是好友):yuehan daxiong luce wang5 wang6
複製代碼
功能:存儲的是
key-value
結構,key
必須是string
常常用於存儲比較複雜的結構,Hash只要求鍵不同,好比姓名,年齡等等
插入/修改:hset hash1 key1 12 獲取:hget hash1 key1 查看hash長度:hlen key 一次性獲取:hmget hash1 key1 key2 複製代碼
功能:存儲是帶分數的有序集合,常常用於排行榜。
sort set 常常被用做排名例如 班級成績排名
存儲和hash同樣,都是一個映射。存儲的是分數與元素的映射。能夠看出是排行榜。 value必須是全局惟一。 score 是浮點型。 sort set類型操做,若是兩個元素的score同樣,按照字節順序排列前後
增長/修改:zadd zset1 10.1 val1
查看個數:zcard zset1
查看排名:zrange zset1 0 2 withscores
查看某個value排名:zrank zset1 val2
複製代碼
和
set
同樣sorted set
也是string
類型元素的集合,不一樣的是每一個元素都會關聯一個**權
**。 經過權值能夠有序的獲取集合中的元素。
該Sort set
類型適合場合: 得到熱門帖子(回覆量)信息:select * from message order by backnum desc limit 5
; (以上需求能夠經過簡單sql
語句實現,可是sql
語句比較耗費mysql
數據庫資源)
案例:利用sort set實現獲取最熱門的前5帖子信息
排序集合中的每一個元素都是值、權的組合 (以前的set集合類型每一個元素就只是一個 值) 複製代碼
咱們只作一個sort set排序集合,裏邊只保留5個元素信息,該5個元素是回覆量最高的 每一個帖子被回覆的時候,都有機會進入該集合裏邊,可是隻有回覆量最高的前5個帖子會存在於在集合,回覆量低的就被刪除。
127.0.0.1:6379> select 2 OK 127.0.0.1:6379[2]> zadd hotmessage 102 11 //添加 (integer) 1 127.0.0.1:6379[2]> zadd hotmessage 141 12 (integer) 1 127.0.0.1:6379[2]> zadd hotmessage 159 13 (integer) 1 127.0.0.1:6379[2]> zadd hotmessage 72 14 (integer) 1 127.0.0.1:6379[2]> zadd hotmessage 203 15 (integer) 1 127.0.0.1:6379[2]> keys * 1) "hotmessage" 127.0.0.1:6379[2]> zrevrange hotmessage 0 100 //按照權由高到低的順序得到具體元素值的信息 1) "15" 2) "13" 3) "12" 4) "11" 5) "14" 127.0.0.1:6379[2]> zadd hotmessage 189 16 (integer) 1 127.0.0.1:6379[2]> zrevrange hotmessage 0 100 1) "15" 2) "16" 3) "13" 4) "12" 5) "11" 6) "14" 127.0.0.1:6379[2]> zremrangebyrank hotmessage 0 0 (integer) 1 //把權最低的那個刪掉 0 0表示刪除第一個權;0 1表示刪除第一個,第二個權; 127.0.0.1:6379[2]> zrevrange hotmessage 0 100 1) "15" 2) "16" 3) "13" 4) "12" 5) "11" 127.0.0.1:6379[2]> zrank hotmessage 12 //權由低到高得到元素排名 (integer) 1 127.0.0.1:6379[2]> zrank hotmessage 11 (integer) 0 127.0.0.1:6379[2]> zrevrank hotmessage 13 //權由高到低得到元素排名 (integer) 2 127.0.0.1:6379[2]> zcard hotmessage //得到集合中元素個數 (integer) 5 127.0.0.1:6379[2]> zscore hotmessage 16 //根據元素值得到對應的權 "189" 127.0.0.1:6379[2]> zincrby hotmessage 100 12 //給指定的元素值增長一些權信息 "241" 127.0.0.1:6379[2]> zrevrange hotmessage 0 100 1) "12" 2) "15" 3) "16" 4) "13" 5) "11" 127.0.0.1:6379[2]> 複製代碼
本文深刻淺出的介紹了Redis的五種數據類型,並經過多個實用示例展現了Redis的用法。除此以外還講述了Redis的優化方法和擴展方法。
一共由三個部分組成; 第一部分對Redis進行了介紹,說明了Redis的基本使用方法、它擁有的5種數據結構以及操做5種數據結構的命令,並詳解了如何使用Redis去構建文章聚合網站、cookie、購物車、網頁緩存。數據庫行緩存等一系列程序。 第二部分對Redis命令進行了更詳細的介紹,並展現瞭如何使用Redis去構建更爲複雜的輔助工具和應用程序,並在最後展現瞭如何使用Redis去構建一個簡單的社交網站。 第三部分對Redis用戶會常常遇到的一些問題進行了介紹,講解了下降Redis內存佔用的方法、擴展Redis性能的方法以及使用Lua語言進行腳本編程的方法。
本書既覆蓋了命令用法等入門主題,也包含了複製、集羣、性能擴展等深刻主題,因此不管是Redis新手仍是對Redis有必定經驗的使用者,應該都能從書中獲益。
若是須要獲取到這個【Redis實戰文檔】文檔的能夠關注個人公衆號【風平浪靜如碼】點「資料獲取」便可獲取!(內容細節比較多,因此把知識點粗略的截圖出來了)
1.1:初認redis;
1.2:使用Redis構建Web應用;
2.1:redis命令;
2.2:數據安全與性能保障;
2.3:使用redis的構建支持程序;
2.4:使用redis構建應用程序組件;
2.5:基於搜索的應用程序;
2.6:構建簡單的社交網站;
3.1:下降內存佔用;
3.2:擴展redis;
3.3:redis的Lua 腳本編程;
若是須要獲取到這個【Redis實戰文檔】文檔的能夠關注個人公衆號【風平浪靜如碼】點「資料獲取」便可獲取!(內容細節比較多,因此把知識點粗略的截圖出來了)
最後祝你們工做順利,升職加薪,面試都能經過,offer拿到手軟,早日找到心儀的工做~