本文來自牛鷺學院學員:廖清蓉
很多剛剛進入軟體測試行業的人對單機版的redis認識還不全面,別人問你redis是啥吱唔半天也說不出個所以然,今天牛鷺學院就系統性的為大家梳理一下吧~
目錄
1、Redis介紹
Redis與MySQL/Oracle的區別2、Redis數據結構
單機redis搭建redis基本數據類型用法3、Redis性能測試
4、Redis架構模式
Redis介紹
與MySQL不同的是,redis是一種非關係型資料庫。Mysql存儲在磁碟裡,而Redis存儲在內存裡。
Redis既可以用來做持久存儲,也可以做緩存,而目前大多數公司的存儲都是Mysql +Redis,Mysql作為主存儲,Redis作為輔助存儲被用作緩存,加快訪問讀取的速度,提高性能。
Redis資料庫有16個,分別是0-15,每個資料庫用數字命名,而且每個資料庫的連接密碼都一樣,redis只允許一個密碼。資料庫之間不能共享,並且基於單機才有,如果是集群,就沒有資料庫的概念了。
redis之所以分這麼多個資料庫,也是為了區分業務,不同的業務存放在不同的庫,但是一個redis,一般是給一個項目用,項目內的不同業務,單獨用一個庫,這樣不會相互有數據交叉。現在很多微服務項目,一個項目裡有多個微服務,redis統一由團隊管理,每個服務連接自己的庫就可以了。
Redis與MySQL/Oracle的區別
存儲介質:
Redis存儲在內存,但是可以將數據持久化到硬碟。MySQL/Oracle將數據持久化的存儲到硬碟;
資料庫類型:Redis屬於非關係型資料庫;MySQL/Oracle關係型資料庫
存取效率:Redis直接在內存中存取數據效率高;MySQL/Oracle每次請求訪問資料庫時,都存在著I/O操作,如果反覆頻繁的訪問資料庫。
會在反覆連結資料庫上花費大量時間,從而導致運行效率過慢;反覆的訪問資料庫也會導致資料庫的負載過高Redis數據結構
測試案例
【問題描述:面對後臺一張"表"400w的資金帳戶數據量(Hadoop HDFS分布式系統存儲映射後的其中一張表),中臺接口通過impala查詢(類似Oracle查詢語法)將得到的結果以bitmap的形式存放至Redis,供其它中臺接口調用,最終將數據在前端展示。】
測試案例分析:
內存佔用過大問題:
經過計算1byte=8bit, 每個客戶進行一次查詢存儲的key佔用的內存400w/8/1024/1024=0.47M,粗略估計2000客戶進行查詢,存儲key佔用的內存=2000*0.47(將近1G),如果查詢頻繁,則必然會出現內存溢出的風險。
優化方法:
針對客戶的操作頻率,一般不會不停地進行數據查詢操作,所以可以將客戶查詢存儲的key設置過期時間,這樣可以減小內存壓力
單機redis搭建
redis安裝三部曲:
準備好redis的安裝包,用xftp傳輸至Linux下root目錄下,解壓並進入redis -5.0.7目錄下
安裝C語言編譯器yum install gcc
2.執行命令 make MALLOC=libc,此時會生成一個redis的源文件
3.輸入make install,當有如下提示,表示你是安裝成功的
此時我們查看一下redis的配置文件ls | grep conf並進入到配置文件裡設置連接vi redis.conf
Esc + /輸入port 查看默認的埠號,輸入127,此時會跳轉到127的關鍵字部分,我們在最後一個127部分加入如下一行,用於綁定自己的IP位址,當然也可以走默認的,不做修改
保存退出,去啟動它src/redis-server redis.conf
如果能夠看到如下的圖形,表示構建成功
在root目錄下執行ps -ef | grep redis查看redis是否已在運行;
然後進入到redis目錄下,輸入命令src/redis-cli -h 192.168.8.3 -p 6379進入redis資料庫操作
redis基本數據類型用法
資料庫之間的切換
Redis支持五種數據類型:
1.字符串(String):增刪改查
set key valuedel keyset key newvalueget keymset key1 value1 key2 value2 --批量增加
2.哈希(Hash)
hset key field_1 value1 – 增hmset key field_1 value1 filed_2 value2 --批量增hdel key filed-- 刪hset key field newValue – 改hget key field --查某一field值hvals filed – 查key對應的field-valueshlen key --計算field個數hkeys --獲取所有field
3. 列表(list)
rpush key value [value …] --右插lpush key value [value …] – 左插linsert key BEFORE|AFTER pivot valuelrange key start stoplindex key indexllen keylpop key – 左彈rpop key – 右彈lset key index value --修改下標index的元素值
4. 集合(sets)
– 集合內元素操作
sadd key element [element …] --增srem key element [element …] --刪scard key --計算元素個數sismember key element --判斷元素是否在集合中spop keysmembers key --獲取所有元素– 集合間元素操作
sinter key [key …] --交集sunion key [key …] – 併集sdiff key [key …] --差集– 將結果保存
sinterstore destination key [key …]suionstore destination key [key …]sdiffstore destination key [key …]
5.有序集合(sorted sets)
Redis性能測試
Redis自帶了一個叫redis-benchmark工具來模擬N個客戶端同時發出M個請求
Redis架構模式
單機版
優點:簡單
缺點:內存容量有限;處理能力有限;無法高可用
集群版
優點:
主從複製:Redis 的複製(replication)功能允許用戶根據一個 Redis 伺服器來創建任意多個該伺服器的複製品,其中被複製的伺服器為主伺服器(master),而通過複製創建出來的伺服器複製品則為從伺服器(slave)。 只要主從伺服器之間的網絡連接正常,主從伺服器兩者會具有相同的數據,主伺服器就會一直將發生在自己身上的數據更新同步 給從伺服器,從而一直保證主從伺服器的數據相同。
————————————————