你都是會點啥技術(三)--- Redis

你都是會點啥技術(三)— Redis

寫在前面的話:利用課餘時間學習了一下redis,這在簡單記錄學習筆記。

1. Redis介紹

Redis是一種非關係型數據庫
Redis是使用c語言開發的一個高性能鍵值數據庫,它可以通過一些鍵值類型來存儲數據
鍵值類型:
String 字符類型 商品編號,訂單號(主鍵,自增)
hash 散列類型 用戶信息,商品信息(易修改)
list 列表類型 評論信息(不修改,查詢塊)
set 集合類型 求並集,交集,差集(無序,不重複)
sortedset 有序集合類型 分值(排名,銷量)

2.Redis應用場景

緩存(數據查詢、短連接、新聞內容、商品內容)
分佈式集羣中的session分離
聊天室的在線好友列表
任務隊列(秒殺,搶購,12306)
應用排行榜
網站訪問統計
數據過期處理(可以精確到毫秒)

3.Redis安裝

wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -xzf redis-5.0.3.tar.gz
cd redis-5.0.3
make 編譯redis源碼(C語言)
src/redis-server --daemonize yes
src/redis-cli
redis> set foo bar
OK
redis> get foo
“bar”

4.redis啓動關閉

(1)將redis源碼包下redis.conf 拷貝到src目錄 cp redis.conf src/
(2)修改redis.conf 將daemonize=yes 將bind=0.0.0.0(redis-server默認開放的是127.0.0.1,改成0.0.0.0纔可以被其他機器訪問)
(3)啓動redis:./redis-server redis.conf
(4)驗證redis:ps -aux | grep redis
(5)防火牆開放端口:firewall-cmd --zone=public --add-port=6379/tcp --permanent 重啓防火牆生效:service firewalld restart
(6)關閉redis:./redis-cli shutdown

在這裏插入圖片描述

5.Redis的五種數據結構

1)STRING(字符串、整數、浮點型)
set str-key 值;get str-key;del str-key
getset str-key 值:設置新值,返回舊值。
mset/gset:設置/獲取多個鍵值
incr/decr str-key:遞增/遞減 ;incrby/decrby str-key 2:指定遞增/遞減
append str-key 字符串:在末尾追加字符串,鍵不存在則相當於set
strlen str-key :返回值的長度,鍵不存在返回0
2)LIST(列表裏面的元素是可以重複的,有序)
LPUSH/RPUSH 將值推入左/右端,LPOP/RPOP 從列表左/右端彈出一個值(被彈出的值將不在存在於列表)
LRANGE list-key 0 -1取出範圍的所有元素 ,LINDEX list-key 索引值 取出指定索引值 llen list-key:列表個數
LREM list-key count value:count>0 從左邊刪除count個等於value的值,count<0 從右邊刪除count個等於value的值,count=0刪除全部等於value的值
lset list-key index value:設置指定索引值
3)SET(集合中的元素各不相同,無序)
SADD 將元素添加到集合,SMEMBERS 返回集合所有元素,SCARD獲取元素個數,SISMEMBER 檢查元素是否存在於集合,SREM 刪除給定的元素,SPOP隨機彈出一個元素
SDIFF s1 s2:屬於s1不屬於s2的元素集合
SINTER s1 s2:屬於s1且屬於s2的元素集合
SUNION s1 s2:屬於s1或屬於s2的元素集合
4)HASH(散列)
hset hash-key 鍵1 值1:在散列裏面關聯起給定的鍵值對
hget hash-key 鍵1:獲取指定散列鍵的值
hgetall hash-key:獲取散列包含的所有鍵值對
hdel hash-key 鍵1:移除指定的鍵值對
hmset/hmget:設置/獲取多個值
hincrby:只有這一個數字操作方法
hexists hash-key 鍵1:0不存在,1存在
hkeys/hvals hash-key:獲取所有鍵/值
hlen hash-key:獲取字段數量
5)ZSET(有序集合的鍵被稱爲成員,值被稱爲分值,分值必須爲浮點數,且唯一)
zadd zset-key 分值 成員名 添加有序集合元素
zrange/zrevrange zset-key 0 -1 withscores 獲取所有元素,並按照分值從小到大/從大到小進行排序
zrangebyscore zset-key 0 800 withscores 按照分值獲取一部分元素
zrem zset-key 成員名 移除指定成員名的元素
zrank zset-key 成員名:獲取成員排名
zincrby z1 increment 成員名:增加指定成員分數

6.keys常用命令

keys *:返回所有key
exists key:確認key是否存在
del key:刪除一個key
rename oldkeyname newkeyname:重命名一個key
type key:返回key的數據類型
expire key seconds: 設置key生存時間秒
ttl key:查看key剩餘的生存時間
persist key:清除key的生存時間
pexpire key milliseconds:設置key生存時間毫秒

7.redis持久化方案

RDB快照(snapshotting)
save 900 1:表示900 秒內如果至少有 1 個 key 的值變化,則保存
save 300 10:表示300 秒內如果至少有 10 個 key 的值變化,則保存
save 60 10000:表示60 秒內如果至少有 10000 個 key 的值變化,則保存
RDB的優勢:
●RDB保存redis在某個時間點上的數據集,這種文件非常適合用於進行備份和災難恢復
●生成RDB文件時,redis主進程會fork()一個子進程來處理所有保存工作,主進程不需要進行任何磁盤操作
●RDB在恢復大數據集時的速度比AOF的恢復速度要快
RDB的劣勢:
●RDB方式沒法做到實時持久化/秒級持久化。bgsave每次運行都要執行fork操作創建子進程,屬於重量級操作,頻繁執行成本過高
●RDB文件使用特定二進制格式保存,存在與老版本Redis服務無法兼容問題
●在一定間隔時間做一次備份,redis異常關閉,會丟失最後一次快照後的所有修改,數據有丟失。
AOF(append-only-file)
appendonly yes 開啓AOF持久化方式
appendfsync no:不執行fsync,由操作系統保證數據同步到磁盤,速度最快,但是不安全
always:表示每次寫入都執行fsync,以保證數據同步到磁盤,效率很低
everysec:表示每秒執行一次fsync,可能會導致丟失這1s數據。通常選擇everysec,兼顧安全性和效率
no-appendfsync-on-rewrite yes:表示rewrite期間對新寫操作不fsync,暫存在內存中,等rewrite完成後再寫入,建議yes。Linux默認fsync策略是30秒,可能丟失30秒數據
auto-aof-rewrite-percentage:默認100.當目前aof文件超過上一次重寫的aof文件大小的百分之多少進行重寫100就是2倍。
auto-aof-rewrite-min-size:64mb。設置允許重寫的最小aof文件大小
AOF文件重寫不是對原文件進行重新整理,而是直接讀取服務器現有的鍵值對,然後用一條命令去代替之前記錄這個鍵值對的多條命令,生生一個新的文件替換原來的AOF文件
AOF優點:
●aof持久化的方法提供了多種同步頻率,即使使用默認同步頻率最多也就丟失1秒數據
●aof文件使用redis命令追加的形式構造,即使redis只能向aof文件寫入命令的片段,使用redis-check-aof工具也很容易修正aof文件
異常修復命令:redis-check-aof --fix
●aof文件格式具有可讀性,在重寫沒進行之前我們可以將錯誤命令去掉。
aof缺點:
●具有相同數據的Redis,aof文件通常比rdf文件體積更大
●在redis負載較高時,rdb比aof具有更好的性能保證
●rdb比aof方式更健壯,存在一些未知bug
建議:一般情況下兩種一起用,當redis重啓的時候會優先載入aof文件來恢復原始數據。通常aof文件保存的數據集比rdb文件保存的數據集更完整。

8.redis主從複製

bind : 配置可以進行訪問的ip,爲了方便使用,直接使用0.0.0.0(但是可能存在安全問題).
port :配置當前配置啓動的Redis的端口.
daemonize <yes/no>:配置是否啓用後臺進程.
pidfile </var/run/redis_6379.pid>:使用後臺進程配置後會生成一個pid文件.一般值修改端口名.
logfile “6379.log”:日誌文件,用於記錄日誌,一般也爲端口名.
replicaof :配置從庫的主從關係(5.0之前爲slaveof),主庫不需要此配置.
replica-read-only <yes/no>:配置從庫是否爲只讀.
主機:不需要配置
從機:1.複製一份src目錄
2.修改配置文件redis.conf。 port、 replicaof(5.0之前爲slaveof)
3.刪除複製主機的持久化文件,dump.rdb,appendonly.aof,開放防火牆端口,重啓防火牆,開啓redis從機服務
4.主機發生增刪改操作,數據會自動同步到從機,從機只能讀不能寫
在主機客戶端輸入info replication查看主從庫信息

Nosql數據庫擴展知識:

1.什麼是NoSQL(Not Only SQL 非關係型數據庫)
爲了解決高併發,高可用,高可擴展,大數據存儲等一系列問題而產生的數據庫解決方法,就是NoSQL,
它不能代替關係型數據庫,只能作爲關係型數據庫的一個良好補充。
2.NoSql的分類
1> 鍵值(key-value)存儲數據庫
相關產品:Redis,Tokyo Cabinet/Tyrant ,Voldemort, Berkeley DB
典型應用:內容緩存,主要用於處理大量數據的高訪問負載
數據模型:一系列鍵值對
優勢:快速查詢
劣勢:存儲的數據缺少結構化
2> 列存儲數據庫
相關產品:Cassandra,Hbase,Riak
典型應用:分佈式的文件系統
數據模型:以列簇式存儲,將同一列數據存在一起
優勢:查找速度快、可擴展性強、更容易進行分佈式擴展
功能相對侷限
3> 文檔型數據庫
相關產品:CouchDB,MongoDB
典型應用:Web應用(與key-value類似,Value是結構化的)
數據模型:一系列鍵值對
優勢:數據結構要求不嚴格
劣勢:查詢性能不高,而且缺乏統一的查詢語法
4> 圖形數據庫
相關數據庫:Neo4J,InfoGrid,Infinite Graph
典型應用:社交網絡
數據模型:圖結構
優勢:利用圖結構相關算法
劣勢:需要對整個圖做計算才能得出結果,不容易做分佈式的集羣方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章