Redis 非關係型資料庫 ( Nosql )

来源:http://www.cnblogs.com/wangxiaoqiangs/archive/2016/06/30/5630616.html
-Advertisement-
Play Games

簡介: Redis 是一個開源的,高性能的 key-value 系統,可以用來緩存或存儲數據。 Redis 數據可以持久化,並且支持多種數據類型:字元串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)。 能夠對關係型資料庫起到很好的補充作用。它還 ...



簡介:

Redis 是一個開源的,高性能的 key-value 系統,可以用來緩存或存儲數據。

Redis 數據可以持久化,並且支持多種數據類型:字元串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)。

能夠對關係型資料庫起到很好的補充作用。它還提供了多種客戶端 Python 、Ruby 、Erlang 、PHP ,可以方便調用。

持久化:

Redis 是一種記憶體資料庫(跟 memcache 類似),在數據存取效率方面很優秀,由於記憶體中的數據時刻面臨丟失的危險,Redis 提供了兩種持久化機制,及時將記憶體中的數據寫入磁碟。

RDB 利用存儲快照的方式把記憶體數據定期寫入磁碟,半持久化

AOF 利用寫日誌的方式(類似 mysql 的 binlog),每執行一條更改 Redis 數據的命令,就寫入到磁碟的一個 aof 文件中

Redis 預設開啟 RDB 模式,關閉 AOF 模式,因為 AOF 更耗資源,但是對數據安全極高,稱為全持久化,按需選擇哪種模式。

主從功能:

為了防止 Redis 磁碟損壞,導致數據丟失,Redis 提供了複製功能,將一個主資料庫的數據自動同步到從資料庫,防止數據丟失。

主從原理:

1、從資料庫啟動後,向主資料庫發送 SYNC 命令
2、主資料庫收到 SYNC 命令後開始保存快照,在此期間所有發給主資料庫的命令都被緩存起來
3、快照保存完後,主資料庫把快照和緩存的命令一起發給從資料庫
4、從資料庫保存主數據發來的快照文件,並依次執行主資料庫發來的緩存命令

在同步過程中,從資料庫不會阻塞,它預設使用同步之前的數據繼續響應客戶端發來的命令

下載地址:https://code.google.com/p/redis/downloads/list

一、安裝 Redis

shell > tar zxf redis-2.6.10.tar.gz
shell > cd redis-2.6.10; make; make install

二、調整 Redis

shell > mkdir /usr/local/redis
shell > cd !$
shell > cp ../src/redis-2.6.10/redis.conf .
shell > cp ../src/redis-2.6.10/src/redis-cli .
shell > cp ../src/redis-2.6.10/src/redis-server .
shell > cp ../src/redis-2.6.10/src/redis-sentinel .
shell > cp ../src/redis-2.6.10/src/redis-benchmark .
shell > cp ../src/redis-2.6.10/src/redis-check-aof .
shell > cp ../src/redis-2.6.10/src/redis-check-dump .

## redis.conf  主配置文件
## redis-cli     命令行操作工具
## redis-server    啟動程式
## redis-sentinel  集群管理工具
## redis-benchmark   性能測試工具,測試 redis 在當前系統配置下的讀寫性能
## redis-check-aof     更新日誌檢查,--fix 可以修複 log 文件
## redis-check-dump 檢查本地數據文件

三、編輯 redis.conf

shell > mv redis.conf redis.conf.bak

shell > vim redis.conf
daemonize yes # 以守護進程方式啟動 pidfile
/usr/local/redis/logs/redis.pid # 定義 pid 文件存放路徑 port 6379 # 監聽埠 timeout 300 # 請求超時時間 loglevel debug # 定義日誌級別 logfile /usr/local/redis/logs/redis.log # 定義日誌文件路徑 databases 16 # 啟動資料庫實例數,預設連接的資料庫為 0 ,可以通過 select N 來連接不同的資料庫
# 從記憶體保存數據到磁碟的策略:
save 900 1 # 當有 1 條 keys 數據改變時,900 秒刷新到磁碟一次
save 300 10 # 當有 10 條 keys 數據改變時,300 秒刷新到磁碟一次
save 60 10000 # 當有 1W 條 keys 數據改變時,60 秒刷新到磁碟一次
rdbcompression yes # dump .rdb 資料庫時,是否壓縮數據對象
dbfilename dump.rdb # dump 資料庫時,資料庫保存的文件名
dir /usr/local/redis/data/ # dump 時資料庫保存的路徑
#-----------------------------------------------------------------------------------------------------
appendonly no                              # 是否開啟日誌功能,如果開啟每次操作都會記錄一條日誌,相當於 mysql 的 binlog ,但是會影響效率
#appendfilename appendonly.aof             # AOF 文件名稱,預設為 ppendonly.aof
#appendfsync everysec                      # 同步數據到磁碟的規則:
                                           #1、 no 不主動寫入磁碟,依賴與系統的寫入,一般 30 秒左右寫入一次,性能最好,但是持久化沒有保證。
                                           #2、 everysec 每秒強制寫入磁碟一次,在性能跟持久化方面折中,推薦使用。
                                           #3、 always 每次收到寫操作就立即強制寫入磁碟,是最有保證的完全持久化,但是速度慢。
#no-appendfsync-on-rewrite yes             # 在日誌重寫時,不進行命令追加操作,而只是將其放在緩衝區里,避免與命令的追加造成磁碟 IO 上的衝突
#auto-aof-rewrite-percentage 100           # 當前 AOF 文件的大小是上次日誌重寫得到的 AOF 文件大小的兩倍時,自動啟動新的日誌重寫過程
#auto-aof-rewrite-min-size 64mb            # 當前 AOF 文件啟動新的日誌重寫過程的最小值,避免剛啟動 redis 時由於文件較小導致頻繁重寫
#-----------------------------------------------------------------------------------------------------

## 設置在向客戶端應答時,是否把較小的包合併為一個包發送

四、啟動 Redis

shell > echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

shell > sysctl vm.overcommit_memory=1

## 調整內核參數,如果不調整 redis 會報一個警告信息

shell > mkdir /usr/local/redis/data # 創建 data 目錄

shell > mkdir /usr/local/redis/logs # 創建 logs 目錄

shell > redis-server /usr/local/redis/redis.conf # 啟動 redis ,需要指定配置文件路徑

shell > netstat -anpt | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1176/redis-server

五、測試 Redis

-----------------------------------------------------------------------------------------------------

shell > redis-cli
redis 127.0.0.1:6379> set password 123
OK
redis 127.0.0.1:6379> get password
"123"
redis 127.0.0.1:6379> quit

## 登陸本機的 redis ,寫入 keys/value ,讀取 keys

shell > ls /usr/local/redis/data/

## 沒有生成 dump.rdb ,因為半持久化的 save 規則沒有觸發

shell > redis-cli shutdown
shell > ls /usr/local/redis/data/
dump.rdb

## 當關閉 redis 的時候,會將記憶體中的數據保存為 dump.rdb

shell > redis-server /usr/local/redis/redis.conf
shell > redis-cli
redis 127.0.0.1:6379> get password
"123"
redis 127.0.0.1:6379> quit

## redis 啟動後從 dump.rdb 文件中讀取數據,所以數據依然存在

-----------------------------------------------------------------------------------------------------

shell > rm -rf /usr/local/redis/data/*

shell > redis-cli
redis 127.0.0.1:6379> set password abcdef
OK
redis 127.0.0.1:6379> get password
"abcdef"
redis 127.0.0.1:6379> quit

shell > kill -9 `cat /usr/local/redis/logs/redis.pid`

## 當不是正常關閉 redis 時,如 kill -9 、redis 伺服器突然宕機等

shell > ls /usr/local/redis/data/

## 是不會將記憶體中的數據同步到磁碟的,也就是說不會生成 dump.rdb 文件

shell > redis-server /usr/local/redis/redis.conf

shell > redis-cli
redis 127.0.0.1:6379> get password
(nil)
redis 127.0.0.1:6379> quit

## 這時啟動 redis ,發現數據丟失了 。如果不能忍受這種丟失可以啟動 AOF 全持久化。

-----------------------------------------------------------------------------------------------------

參考文獻:

http://blog.csdn.net/qtyl1988/article/details/39553339


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文為原創文章,轉載請註明出處。 文章最後附帶DEMO,請需要的朋友下載。 從API 17開始,Android提供了Presentation類,為多屏異顯開發提供了官方支持,當然最終需求的實現也需要底層硬體及驅動的支持。 基本需求:控制輔屏全屏顯示與主顯不同的內容,且當主顯全屏顯示的內容變化後對輔屏 ...
  • PS:註意事項 一些坑在此聲明: 1、安裝Eclipse後,記得設置各項編碼格式為utf-8 請移步:http://www.blogjava.net/xiaomage234/archive/2014/05/13/413626.html(我也是網上查閱的~~) 2、下載Android SDK時需要翻牆 ...
  • 一、背景 很久之前就想寫一篇文章來記錄Cordova的使用了,上次用到它是在一年前,這次用到它是在這個月。下次用到它還不知道是什麼時候了,為了供以後翻閱,在此做個記錄。現在很多資料都是在硬碟里、網路收藏夾里。這次就一次性彙總到這裡吧。 二、簡介 Cordova提供了一組設備相關的API,通過這組AP ...
  • CocoaLumberjack是一個很好用的日誌列印工具,它可以幫助我們把工程中的日誌信息列印到終端或者輸出到文件中。 地址:https://github.com/CocoaLumberjack/CocoaLumberjack 類圖: 一:插件的運用 因為網上已經對CocoaLumberjack的運 ...
  • sql 的發佈訂閱,想必大家都瞭解,但一般都是在預設的1433的情況下搭建的,那麼1433換成別的埠,發佈還能正常工作嗎? 在一次客戶的真實場景上我就遇到了。 好了,今天不想寫太多,簡化下, 測試環境 發佈伺服器 電腦名 win-01 分發伺服器 電腦名 win-01 (與發佈用的同一臺) 訂 ...
  • 介紹 以前沒有太註意MySQL密碼安全策略的配置方法,只是人為了將密碼設為複雜密碼,但是沒有找到配置的方法,今天薑承堯的微信公眾號正好發佈了一篇關於這個的文章,所以在這裡也順便將方法寫下來。首先該功能是在5.5以後的mysql版本才引入的插件,預設源碼安裝和二進位安裝都沒有啟用該功能,如果沒有開啟該 ...
  • 今天在測試、驗證DROP_SNAPSHOT_RANGE不能徹底快照的過程中遇到了DROP_SNAPSHOT_RANGE無法清理WRM$_SNAPSHOT_DETAILS表中數據的情況,測試伺服器版本為10.2.0.5.0,AWR的快照是1小時採集一次數據,快照保留14天,也就是二周。具體情況如下所示... ...
  • 雖然使用不多,但是也有情況是需要在mysql 裡面寫語句開發功能的。在sql server 使用慣了,習慣了使用row_number() 函數進行排序,但是mysql 確沒有這樣一個函數。然後找到了po主寫的一篇 文章。通過變數賦值來查詢的。(PS 我測試的版本是mysql 5.6) 參考鏈接:ht ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...