超詳細的Redis數據庫入門教程,還有redis實踐電子書分享

Redis簡介

要想了解redis就需要知道什麼是非關係型數據庫NoSQL(not only sql)?

  • 泛指非關係型的數據庫
  • 不支持SQL語法
  • 存儲結構跟傳統關係型數據庫中的那種關係表完全不同,nosql中存儲的數據都是KV(鍵值對)形式
  • NoSQL的世界中沒有一種通用的語言,每種nosql數據庫都有自己的api和語法,以及擅長的業務場景
  • NoSQL中的產品種類相當多:Redis、Mongodb、Hbase hadoop、Cassandra hadoop
  • sql數據庫適合用於關係特別複雜的數據查詢場景,nosql反之;sql對事務的支持非常完善,而nosql基本不支持事務,兩者在不斷地取長補短,呈現融合趨勢。

    Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。Redis是 NoSQL技術陣營中的一員,它通過多種鍵值數據類型來適應不同場景下的存儲需求,藉助一些高層級的接口使用其可以勝任,如緩存、隊列系統的不同角色

    特性和優勢

  • Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
  • Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
  • Redis支持數據的備份,即master-slave模式的數據備份。
  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
  • 原子 – Redis的所有操作都是原子性的。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
  • 應用場景

  • 用來做緩存(ehcache/memcached)——redis的所有數據是放在內存中的(內存數據庫)
  • 可以在某些特定應用場景下替代傳統數據庫——比如社交類的應用
  • 在一些大型系統中,巧妙地實現一些特定的功能:session共享、購物車
  • 只要你有豐富的想象力,redis可以用在可以給你無限的驚喜…….
  • redis安裝與配置

    以ubuntu為例:

    <code># 下載wget http://download.redis.io/releases/redis-4.0.9.tar.gz# 解壓tar xzf redis-4.0.9.tar.gz# 移動,放到usr/local⽬錄下sudo mv ./redis-4.0.9 /usr/local/redis/# 進⼊redis⽬錄cd /usr/local/redis/# 生成sudo make# 測試,這段運⾏時間會較⻓sudo make test# 安裝,將redis的命令安裝到/usr/local/bin/⽬錄sudo make install# 安裝完成後,我們進入目錄/usr/local/bin中查看cd /usr/local/binls -all    redis-server redis服務器    redis-cli redis命令行客戶端    redis-benchmark redis性能測試工具    redis-check-aof AOF文件修復工具    redis-check-rdb RDB文件檢索工具# 配置⽂件,移動到/etc/⽬錄下sudo cp /usr/local/redis/redis.conf /etc/redis//<code>

    核心配置選項

  • 綁定ip:如果需要遠程訪問,可將此⾏註釋,或綁定⼀個真實ipbind 127.0.0.1
  • 端⼝,默認為6379port 6379
  • daemonize yes 是否以守護進程運⾏如果以守護進程運⾏,則不會在命令⾏阻塞,類似於服務如果以⾮守護進程運⾏,則當前終端被阻塞設置為yes表示守護進程,設置為no表示⾮守護進程推薦設置為yes
  • 數據⽂件dbfilename dump.rdb
  • 數據⽂件存儲路徑dir /var/lib/redis
  • ⽇志⽂件logfile "/var/log/redis/redis-server.log"
  • 數據庫,默認有16個database 16
  • 主從複製,類似於雙機備份。slaveof
  • 簡單命令

    <code># 查看幫助⽂檔redis-ser查看redis服務器進程ver --help# /<code>

    數據操作

    redis是key-value的數據結構,每條數據都是⼀個鍵值對

    鍵的類型是字符串

    注意:鍵不能重複

    值的類型分為五種:字符串string、哈希hash、列表list、集合set、有序集合zset

    <code># string類型增、改如果設置的鍵不存在則為添加,如果設置的鍵已經存在則修改set name itcast  設置鍵為name值為itcast的數據setex aa 3 aa  設置鍵為aa值為aa過期時間為3秒的數據mset a1 python a2 java a3 c  設置鍵為a1值為python、鍵為a2值為java、鍵為a3值為cappend a1 haha   向鍵為a1中追加值haha獲取get name  獲取鍵name的值mget a1 a2 a3  獲取鍵a1、a2、a3的值# 鍵命令查找鍵,參數⽀持正則表達式keys *    查看所有鍵exists a1    判斷鍵是否存在,如果存在返回1,不存在返回0type key   查看鍵對應的value的類型del key1 key2 …     刪除鍵及對應的值expire key seconds     設置過期時間,以秒為單位ttl key    查看有效時間,以秒為單位# hash類型增加、修改hset user name itheima    設置鍵user的屬性name為itheimahmset u2 name itcast age 11   設置鍵u2的屬性name為itcast、屬性age為11獲取hkeys u2    獲取鍵u2的所有屬性hvals key   獲取所有屬性的值hget u2 name   獲取鍵u2屬性name的值hmget u2 name age   獲取鍵u2屬性name、age的值刪除hdel u2 age  刪除鍵u2的屬性age# list類型增加lpush a1 a b c    從鍵為a1的列表左側加⼊數據a 、 b 、crpush a1 0 1   從鍵為a1的列表右側加⼊數據0、1linsert a1 before b 3   在鍵為a1的列表中元素b前加⼊3獲取lrange a1 0 -1   獲取鍵為a1的列表所有元素lset a 1 z   修改鍵為a的列表中下標為1的元素值為z刪除lrem a2 -2 b   從a2列表右側開始刪除2個bltrim key 0,4   截取# set類型• ⽆序集合• 元素為string類型• 元素具有唯⼀性,不重複• 說明:對於集合沒有修改操作增加sadd a3 zhangsan sili wangwu    向鍵a3的集合中添加元素zhangsan、lisi、wangwu獲取smembers a3  獲取鍵a3的集合中所有元素刪除srem a3 wangwu    刪除鍵a3的集合中元素wangwu# zset類型有序集合每個元素都會關聯⼀個double類型的score,表示權重,通過權重將元素從⼩到⼤排序增加向鍵a4的集合中添加元素lisi、wangwu、zhaoliu、zhangsan,權重分別為4、5、6、3zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan獲取zrange a4 0 -1   獲取鍵a4的集合中所有元素zrangebyscore a4 5 6    獲取鍵a4的集合中權限值在5和6之間的成員zscore a4 zhangsan   獲取鍵a4的集合中元素zhangsan的權重刪除zrem a4 zhangsan   刪除集合a4中元素zhangsanzremrangebyscore a4 5 6    刪除集合a4中權限在5、6之間的元素/<code> 

    其他特性及高級用法

    事務

    提供了基本的事務支持,可以允許一組指令操作按照原子性(不被打斷的情況下)執行,

    但是並沒有提供回滾操作的支持,而且一組指令中如果有指令執行出錯,也不會終止事務的執行,事務會繼續執行下去,把後續的指令都執行完。

    • multi 開啟事務
    • exec 執行事務

    watch指令 監視

    一般會結合著redis事務的 multi 、exec一起使用

    首先可以使用watch 讓redis幫助我們監視某些redis數據的變化,然後再創建事務,當要開始執行事務的時候,如果由watch監視的變量(數據)發生了變化,則redis事務的任何指令都不會被執行,事務直接停止,如果watch監視的變量(數據)沒有發生變化,則redis事務會執行到底(不被打斷)。

    持久化

    redis可以將數據寫入到磁盤中,redis支持持久化

    • RDB 快照持久化 默認開啟
      • 將內存中的redis的所有數據,寫入磁盤文件
      • redis會創建子進程來執行
      • 執行的時機:
        • 定期持久化 (自動)

    save 900 1 # 900秒內進行過1次寫操作

    save 300 10 # 300秒內進行過10次寫操作

    save 60 10000 # 60秒內進行過10000次寫操作

    修改redis配置文件 可以調整 /etc/redis/xxxx.conf

    • BGSAVE (手動)SAVE
    • SHUTDOWN (手動) 關閉
    • 缺點:需要將內存中的所有redis數據全部寫入到磁盤,性能有開銷影響,不會太快 優點:相比AOF 而言 持久化的磁盤文件 要小很多
    • AOF 追加文件方式持久化 默認不開啟的 如果開啟 appendonly yes
      • 將執行過的redis 寫操作 記錄到磁盤文件中
      • 執行的時機:

    # appendfsync always # 每執行一個寫操作,就立即記錄到磁盤中

    appendfsync everysec # 每秒寫入一次磁盤

    # appendfsync no # redis本身不再保證每個操作或每秒中都能立即寫入磁盤,而是有操作系統決定把緩存的寫操作何時寫入磁盤

    • redis指令執行時間的數量級 : 1秒鐘可以執行10000+的指令
    • 優點: 持久化記錄的執行效率相比RDB 稍高,缺點: 持久化產生的磁盤文件很大(因為記錄了所有的操作)
    • RDB 可以和AOF同時使用

    Redis 複製集

    redis 主從同步, 起到了數據備份的作用

    • 可以在運行的redis中 執行slaveof指令
    • 可以在配置文件中 執行redis從屬於另外哪臺機器

    可以使用info Replication 查看機器的主從角色

    一般slave機器 (備份機) 是不支持寫操作的

    在redis的主從同步 複製集機器中 一般不會在進行讀寫分離了

    redis複製集 只能一主 多從

    哨兵 sentinel

    是redis官方提供的 用於管理主從機器 (複製集) 集群,可以方便的進行redis服務器監視、自動故障轉移等操作

    哨兵實際上就是一個單獨運行的進程 redis-sentinel ,這個程序已經隨著redis服務的安裝一起安裝好了,只需要運行即可。

    作用:

    • Monitoring 監視 幫助我們判斷哪些redis服務程序已經死掉,哪些還在存活
      • 用網絡通訊完成 定期的發送網路包(心跳包) 比如每1s發送一次 心跳機制
    • Notification 通知
    • Automatic failover 自動故障轉移 (核心)
      • 在master死掉的時候,選出一個新master,並且將其他slave都slaveof這個新master
    • Configuration provider 配置提供

    總結: 一般只要使用了redis的複製集,就會一起配合使用哨兵,來完成高可用


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享

    <code>使用方式:redis-sentinel /etc/redis/xxx.conf# 配置文件bind 127.0.0.1  # 哨兵運行的ipport 26380  # 哨兵運行的端口daemonize yes # 是否以後臺的守護進程方式運行logfile /var/log/redis-sentinel.logsentinel monitor mymaster 127.0.0.1 6380 2sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000/<code>

    # 說明

    sentinel monitor mymaster 127.0.0.1 6380 2

    * mymaster -> 我們給讓哨兵監視的這個redis複製集集群起的名字,以master為主

    * 2 表示是有幾臺以上的哨兵程序判斷 redis服務死掉,才進行故障轉移

    • 哨兵程序至少要運行三個以上
    • 要求哨兵程序儘量分散,分散到不同的機器裡,不要一窩端
    • 哨兵為了完成故障轉移,會自動修改redis的配置文件,所以僅僅依靠redis配置文件判斷機器的主從角色,並不是很方便, 可以使用info Replication 查看機器的主從角色

    其中redis還有許多相關命令,具體可以參考官方文檔doc.redisfans.com,還有更多的內容包括redis主從和集群的配置,還有redis實戰,都可以從下面這本資料中學習到,超級好用。列舉一些截圖:


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享


    超詳細的Redis數據庫入門教程,還有redis實踐電子書分享


    作者簡介:Python菜鳥工程師,將在接下來的一段時間內與大家分享一些與Python相關的知識點。如若文中出現問題,各位大佬多多指點,互相學習。喜歡的關注一個吧!謝謝!


    分享到:


    相關文章: