redis

一、redis簡介(sina)redis

是什麼數據庫

1)Redis:REmote DIctionary Server(遠程字典服務器)緩存

2)是徹底開源免費的,用C語言編寫的,遵照BSD開源協議,服務器

是一個高性能的(key/value)分佈式內存數據庫,基於內存運行,數據結構

並支持持久化的NoSQL數據庫,是當前最熱門的NoSql數據庫之一,也被人們 稱爲數據結構服務器。app

3)Redis 與其餘 key - value 緩存產品有如下三個特色:異步

3.1)Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重 啓的時候能夠再次加載進行使用分佈式

3.2)Redis不只僅支持簡單的key-value類型的數據,同時還提供list, set,zset,hash等數據結構的存儲性能

3.3)Redis支持數據的備份,即master-slave模式的數據備份大數據

爲何

1)內存存儲和持久化:redis支持異步將內存中的數據寫到硬盤上,同 時不影響繼續服務

2)取最新N個數據的操做,如:能夠將最新的10條評論的ID放在 List集合

3)模擬相似於HttpSession這種須要設定過時時間的功能

4)發佈、訂閱消息系統

5)定時器、計數器

二、redis安裝

文檔

三、redis數據類型

數據存儲方式   key     value

kv模式

五大數據類型:string    list   set  zset  hash

四、redis基本操做

鍵:keys *     

string: 單鍵單值   key:string  value:string

set/get/del/append/strlen    設置 獲取  刪除  追加   長度

          incr/decr/incrby/decrby   要是數值才能加減

        getrange/setrange   指定範圍內

       setex(鍵秒值)/setnx(set if not exist)

        mset/mget/msetnx

expire key n  對已經存在的key設置過時時間,新設的會替代舊的

ttl  key  查看過時時間   -1永不過時   -2已通過期

hash:    單鍵單對象    key :string   value:object

key:{name:zhaoliying,age:10}

hset/hget/hmset/hmget/hgetall/hdel

hset  key  field   value   設置  key  屬性   值

hget  key  field     獲取key 屬性  拿到屬性值

hlen

hlen key  獲取屬性的個數

hexists

hexists key  key裏面的某個field

hkeys/hvals

hkeys   key   獲取key裏面全部的屬性

hvals  key   獲取key裏面全部的屬性值

hincrby/hincrbyfloat

hincrby  key  field  整數

hincrbyfloat  key  field   小數

hsetnx

hsetnx  key  field  值   若是這個屬性不存在  設置

 

列表:單鍵單列表  key:string  value:list

lpush/rpush/lrange     

lpush   從左邊插入    鍵   值     

rpush  從右邊插入

lrange   lrange  list  0   -1     從左邊開始查看範圍元素

lpop/rpop

lpop  從左邊每次出一個,刪除

rpop 從右邊每次出一個

lindex

按照索引獲取值

llen

計算list 長度

lrem

lrem key 刪除 n個value

ltrim

ltrim key 開始index  結束index   截取指定範圍後再賦值給key

rpoplpush

rpoplpush  源列表   目的列表  

從源列表右邊取一個,而後從左邊加入目的列表

lset

lset  key  index  value 爲列表某一個元素賦值

linsert

linsert  key before/after  值1  值2

在列表的值1前面 或者後面 插入一個值2(第一個值得前面或者後面)

 

集合:單鍵單集合   key:string   value :set

sadd/smembers/slsmember

scard  

獲取集合中的個數

srem

 srem  key  值  刪除集合中的元素

srandmember  

srandmember  key  某個整數   隨機出整數個值,不刪除

spop key  

隨機出棧  一次一個 刪除

smove

smove  key1  key2  在key1裏面的某個值

將key1裏面的某個值賦值給key2

數學類:

sdiff:差集

sdiff   key1  key 2   取key1裏面和key2不一樣的值

sinter:交集

sinter key1  key2    取key1裏面和key2裏面相同的值

sunion:並集

  sunion  key1  key2  取key1裏面和key2裏面全部不重 復的元素

 

有序集合: 單鍵單集合key:string value:集合

在set 基礎上加了一個score值(分值)  權重

以前set 是k1  v1  v2  v3

如今zset是  k1  score1  v1   score2  v2

zadd/zrange/zrange.withscores

zadd key  score1 v1  score2   v2

zrange  key  0  -1 / zrange key 0  -1  withscores   查看值/查看                       分和值

zrangebyscore/zrangebyscore.withscores

zrangebyscore  key  開始score   結束score    查看範圍分的值

注意:( 表明不包含  zrangebyscore  key  (60   (90   

limit   2   2   從下標爲2的開始拿2個

zrem

zrem  key  值   刪除指定一組值

zcard/zcount key score(區間)/zrank key values值

zcard key   獲取組的個數

zcount  key  score1   score2   獲取分值在score1和score2之 間的個數

zrank key  值   獲取對應值的下標

zscore  key 值   獲取對應值的分數

若是想要清空全部的數據庫數據:flushall

若是隻想要清空單個數據庫數據:flushdb   (先進入要清空的數據庫select )

若是想要知道key的類型   type  key  能夠查看數據的類型

 

五、redis事務(redis部分支持事務 )

案例?

是什麼?

本質上就是一堆命令的集合,一個事務中全部的命令都會被序列化,串行化執行,不會被其它命令插入或者加塞,在隊列中一次性、順序性、排他性的執行一系列命令

怎麼作?

五個命令:

   Multi     開啓事務

Exec      執行事務

Discard  放棄事務

Watch   監控一個或者多個鍵

Unwatch  放棄監控

 

五個應用場合:

  • 正常執行      
  • 放棄事務  
  • 一隻老鼠壞一鍋粥        執行前出錯(命令出錯)
  • 誰犯法誰坐牢               執行後出錯(值出錯)
  • Watch監控

樂觀鎖/悲觀鎖/CAS(check and set)

案例

      先監控   再事務   有人加塞  一切重新開始

      先監控   再事務   知道有人加塞   取消監控  從頭開始

小結:

當事務執行後全部的監控都將取消掉~ watch相似於給咱們的鍵加上樂觀鎖,當在執行事務提交的時候,值被改變,那麼此次的事務將會失敗,整個事務都會失敗

六、redis持久化策略:(官方文檔)

什麼是redis的持久化?

Rdb:(redis database):

概念

fork

.rdb文件

配置文件

模擬生成rdb文件

備份(主機和備機)

Save  bgsave   flushall

備份恢復

優勢:備份速度快

缺點:數據精度不保證  fork

怎麼不配置rdb

小結:

 

Aof:(append only file):

爲何還有aof

概念

.aof文件

配置

Aof的啓動   

修復壞掉的aof文件   --fix   

恢復

Aof和dump.rdb先找誰

Rewrite:

是什麼?

重寫原理fork?

觸發條件 :上次重寫1倍而且64M以上?   

優勢:靈活配置、數據完整性高

缺點:文件會biger,運行效率比rdb低

小結:

 

思考:若是我使用了aof可不能夠不使用rdb

最終持久化策略處理:

七、主從複製

一主二從:

1)主機:進入配置文件,把bind選項修改成本身電腦的ip

2)從機:進入配置文件,把bind選項修改成從機的ip

bind    192.168.28.12

slaveof  主機ip  6379

3)當配置完成後必定記得重啓主從兩個redis服務

4)主機鏈接:redis-cli  -h  主機ip

5)從機鏈接:redis-cli  –h  從機ip

6)在主的上面去設置值,在從的上面能夠獲取到值,表明主從設置完成

注意:主機掛掉,從機死等     從機掛掉後,翻身仍是鹹魚

代代相傳:不能隔代傳遞,中間有一代死,後面全死

翻身作主:slaveof no one

哨兵模式:實際上是翻身作主的自動化

一、新建sentinel.conf文件

二、在配置文件當中配置監控:監控主機

三、sentinel monitor 自定義哨兵名字 主機ip  主機端口   投票基數

四、sudo redis-sentinel  sentinel.conf啓動哨兵

八、用Pythonredis驅動包和redis數據庫交互

使用redis包裏面的StrictRedis模塊,建立鏈接對象

使用鏈接對象能夠直接使用方法增刪改查

增刪改查的方法和終端命令方法相同。

九、消息的訂閱和發佈

1)開三個終端,都去鏈接上redis

2)在其中兩個終端上去訂閱頻道:subscribe  頻道名(能夠是多個)

3)在第三個終端上去發佈消息    publish  頻道名  消息信息

相關文章
相關標籤/搜索