Redis分享

yunxunmi 9年前發布 | 18K 次閱讀 Redis 分享 NoSQL數據庫

一、redis簡介

    Redis是一個開源的使用C語言編寫的可基于內存亦可持久化的高性能日志型、key-value數據庫,redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部分場合可以對關系數據庫起到很好的補充作用。云尋覓性能測試結果:

SET操作每秒鐘 110000 次,GET操作每秒鐘 81000 次。

1.常用程序命令
   啟動:user00@JYKG_999:/data/app/redis/bin> ./redis-server ../redis.conf &(一定要跟后面的配置文件,不然redis會默認按照原始配置去啟動。)
    停止:user00@JYKG_999:/data/app/redis/bin> ./redis-cli shutdown(這個命令其實跟ctrl-c差不多,比較暴力。使用前一定要使用bgsave命令將內存中的數據落地完成后在shutdown,不然會造成內存數據丟失)
    落地:user00@JYKG_999:/data/app/redis/bin> ./redis-cliredis 127.0.0.1:6379> bgsave

   bgsave命令執行后會在后臺執行,因此查詢bgsave的進度可以使用ps查詢redis的進程數,默認啟動redis-server的時候只有一個進程,bgsave的時候會加一個,當最終變成一個進程的時候代表bgsave完畢,也可以使用下面的info命令進行查詢。
進程信息查詢:redis 127.0.0.1:6379> info

2.配置文件redis.conf
   daemonize:默認值為no,即不再后臺運行,改為yes即為后臺運行
   pidfile:指定reidspid文件名稱和路勁。
   port::進程開啟的端口號
   timeout:設置客戶端的超時間,默認為0(即關閉)
   loglevel:日志輸出的級別,debugverbosenoticewarning。依次遞減,運營環境使用verbose,生產環境使用notice
   databases:設置數據庫的個數,可以使用SELECT 命令來切換數據庫。默認使用的數據庫是0
   save:進行落地備份的判斷,即在多少秒內發生多少個key變化是進行備份。例如save 600 10000
   rdbcompression:在進行鏡像備份時,是否進行壓縮 
   dbfilename:鏡像備份文件的文件名
   dir:備份文件的放置路勁
   slaveof:定義該機為salve.配置為salveof 1.1.1.1 6379則代表從1.1.1.1的6379端口同步redis數據。當配置好slave 后,slave master 建立連接,然后發送sync 命令。無論是第一次連接還是重新連接,master 都會啟動一個后臺進程,將數據庫快照保存到文件中,同時master 主進程會開始收集新的寫命令并緩存。后臺進程完成寫文件后,master 就發送文件給slaveslave將文件保存到硬盤上,再加載到內存中,接著master 就會把緩存的命令轉發給slave,后續 master 將收到的寫命令發送給slave 。如果master 同時收到多個slave 發來的同步連接命令,master 只會啟動一個進程來寫數據庫鏡像,然后發送給所有的slave 
    masterauth:當主數據庫連接需要密碼驗證時,在這里指定 
    slave-serve-stale-data:當該salvemaster失去連接時進行的操作,當設置為yes,則該salve不斷的去連接master直到連通。no則直接斷開保存退出。
    maxclients:限制同時連接的客戶數量。當連接數超過這個值時,redis將不再接收其他連接請求
    maxmemory:設置redis 能夠使用的最大內存。當內存滿了之后,如果還收到set請求,則刪除最早的key來補充,適合于只做緩存。
    appendonly:是否開啟aof備份,即實時追加信息到aof文件,是一種高效的數據庫備份及災難恢復方式。k歌的做法是master關閉該選項,在slave打開了該選項。
     appendfsync:設置對 appendonly.aof  文件進行同步的頻率。always代表實時同步,everysec代表每秒同步一次。
     vm-enabled:是否開啟虛擬內存支持。但是需要注意的是,redis中,所有的key 都會放在內存中,在內存不夠時,只會把value 值放入交換區。這樣保證了雖然使用虛擬內存,但性能基本不受影響.

二、數據類型

1.Keys

    Key屬于字符串類型,不是binary safe的字符串,所以不允許使用空格和換行符。

2.value

string類型

    string是redis 最基本的類型,而且string 類型是二進制安全的。意思redis的string 可以包含任何數據。比如jpg 圖片或者序列化的對象。從內部實現來看其實string 可以看作byte 數組,最大上限是1G 字節。下面是string 類型的定義。

list類型

    list是一個鏈表結構,每一個子元素都屬于string類型的雙向鏈表,即為隊列或者棧。獲取一個范圍的所有值,對應的key可以理解為鏈表的名字。

    redis 提供五種數據類型:string,hash,list,set 及sorted set。

三.業務優化點

    1、鍵:盡量使用更短的鍵名,因為鍵名越長占用的空間越大,尤其與對用戶相關的鍵名,每個用戶節省一個字節就可以節省千千萬萬的內存

    2、值:如果業務上面可以使用整數就盡量不要用字符串,因為整數的存儲空間比字符串節省很多,尤其對于小于1萬的值,redis提前創建了對應的對象,不需要額外的存儲。

    3、使用proxy建立與Redis-server的長連接,從而減少redis-server創建redis-client的消耗,節省服務器資源。

    4、在設計初期,盡量將業務數據分別部署到不同的redis實例中,初期由于數據量小,這些redis實例可以部署到一臺機器上面,當業務量增大后,可以將redis實例遷移到其他機器,由于redis支持主從復制,因此遷移起來就非常方便了(摘自KM:【應用】Redis使用中值得注意的優化點)

四.附錄

Redis 云尋覓網址 http://tieba.yunxunmi.com/

 本文由用戶 yunxunmi 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!