一、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 放棄監控
五個應用場合:
樂觀鎖/悲觀鎖/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 頻道名 消息信息