摘要:重啟服務,配置文件就會生效。命令以只能追加的方式記入日志,記入的格式與協議本身相同。因為對于父進程,如果要執行持久化,唯一要做的就是創建一個子進程,而子進程會做所有的事情。需要經過通過子進程寫磁盤。
什么是NoSQL?為什么要用NoSQL?
指web1.0時代以來,我們一直在使用關系型數據庫,例如比較流行的關系型數據庫有MySQL,SQL SERVER Oracle,但隨著Web2.0時代的到來,隨之而來的便是產生的海量數據以及高并發的數據庫操作,這些事情所帶來的是極大增大了數據庫服務器及其相關服務器的負載能力,例如雙“11.11”時期,其數據庫操作可達千萬級每秒,支付寶每分處理的事務以億計算。為了解決以上問題,非關系型數據庫即NoSQL便應運而生,市面上常見的NOSQL有Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB,Cassandra, HBase, Riak等。 以下是集中常見NoSQL產品性能比較: ![圖片描述][1]Redis簡介
Redis是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型。Redis提供了5種不同類型的數據結構,各式各樣的問題都可以很自然地映射到這些數據結構上:Redis的數據結構致力于幫助用戶解決問題,而不會像其他數據庫那樣,要求用戶扭曲問題來適應數據庫。除此之外,通過復制、持久化(persistence)和客戶端分片(client-side sharding)等特性,用戶可以很方便地將Redis擴展成一個能夠包含數百GB數據、每秒處理上百萬次請求的系統。Redis安裝
一、Redis的下載地址
Redis官方并沒有提供Redis的windows安裝包,但在github上, 有相關的下載地址,如下:
https://github.com/ServiceSta...
也可以到我的百度網盤下載,下載地址:http://pan.baidu.com/s/1gf2nuin,我下載的版本是redis-64.3.0.503.zip(64位的win系統,redis
3.0版本)。
二、Redis的安裝和配置
找到下載的壓縮包 redis-64.3.0.503.zip,解壓后,重命名為redis-3.0,置于某個文件夾下(如D:Program Files)。
運行Redis服務器端
直接雙擊D:Program Filesredis-3.0目錄下的redis-server.exe文件(redis服務器端),就會以窗口的形式運行Redis服務器(但該窗口不可關閉,否則,Redis服務不可用)。此種運行redis服務器的方式,沒有加載指定的配置文件。如果出現如下界面
運行Redis客戶端
直接雙擊D:Program Filesredis-3.0目錄下的redis-cli.exe文件(redis客戶端),如果顯示127.0.0.1:6379> ,就說明客戶端運行成功。
輸入命令: keys *
查看所有的鍵
如果提示“NOAUTH Authentication required.”,則說明Redis服務器設置了密碼,請輸入正確的密碼后,再來進行其他操作。
輸入命令: auth 密碼
如果提示OK,就說明密碼正確。
Tips:可以將D:Program Filesredis-3.0目錄下的redis-server.exe發送到桌面快捷方式,便于以后快速打開Redis客戶端。
將Redis服務安裝到本地服務
由于上述啟動Redis服務器的方式有點復雜,且redis服務窗口不可關閉。故這里介紹如何將Redis服務安裝到Windows系統的本地服務。
復制D:Program Filesredis-3.0目錄下的redis.windows.conf文件,重命名為redis.conf,來作為redis的配置文件。
打開win系統的命令行,依次輸入下列命令:
d: (回車,切換到d盤)
cd Program Filesredis-3.0 (回車,切換至D:Program Filesredis-3.0目錄)
redis-server --service-install redis.conf --loglevel verbose (回車,安裝redis本地服務,指定配置文件redis.conf)
操作完成后,就可以到win系統的本地服務管理處,查看和操作Redis服務。(計算機圖標右鍵 -> 管理) -> 服務和應用程序 -> 服務)
設置Redis密碼
編輯D:Program Filesredis-3.0目錄下的redis.conf配置文件,找到如下代碼:
requirepass foobared將其復制一行,去掉前導的#注釋符,將foobared改為你要設置的密碼,如:
requirepass test
保存退出。
重啟Redis服務,配置文件就會生效。
如何卸載Redis本地服務
打開win系統命令行,依次輸入下列命令:
d:
cd Program Filesredis-3.0
redis-server --service-uninstall
就可將Redis本地服務卸載。
安裝Redis Desktop Manager
Redis Desktop Manager是一個可視化的Redis數據庫管理工具,使用非常簡單,這里不做介紹。
下載地址:http://pan.baidu.com/s/1i44AXal
這里提供Redis安裝包以及Redis客戶端的工具安裝包下載鏈接:
Redis安裝包下載:鏈接:https://pan.baidu.com/s/1o779TBO 密碼:n8mw
Redis客戶端的工具安裝包下載:鏈接:https://pan.baidu.com/s/1hsD2mX2 密碼:40nd
接下來我將以一段代碼的形式來介紹有關于Jedis的相關操作:
public class JedisDemo1 { /** * Jedis實例 */ @Test public void demo1() { //1.設置IP地址和端口 Jedis jedis = new Jedis("127.0.0.1", 6379); //2.保存數據 jedis.set("name", "james"); //3.獲取數據 String value = jedis.get("name"); System.out.println(value); //4.釋放資源 jedis.close(); } /** * 使用連接池的方式來操縱Jedis */ @Test public void demo2() { //活動鏈接池的配置對象 JedisPoolConfig config = new JedisPoolConfig(); //設置最大的連接數 config.setMaxTotal(30); //設置最大的空閑連接數 config.setMaxIdle(10); //獲取連接池 JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379); //獲取核心對象Jedis Jedis jedis = new Jedis(); try { //通過連接池獲得連接 jedis = jedisPool.getResource(); //設置數據 jedis.set("name", "張三"); jedis.set("age", "25"); String name = jedis.get("name"); System.out.println(name); } catch (Exception e) { e.printStackTrace(); }finally{ //釋放資源 if(jedis!=null){ jedis.close(); } if(jedisPool!=null){ jedis.close(); } } } }
該項目源碼下載:鏈接:https://pan.baidu.com/s/1c2nlSkw 密碼:1iym
Redis的5中數據結構
string
使用string時,redis大多數情況下并不會理解或者解析其含義,無論使用json、xml還是純文本在redis看來都是一樣的,只是一個字符串,只能進行strlen、append等對字符串通用的操作,無法針對其內容進一步操作。其基本操作命令有set、get、strlen、getrange、append:
SET key value
GET key
STRLEN key
GETRANGE key start end
APPEND key value
Hash
使用hash時,在我看來,就是value本身就是一組key-value對,不過redis將這里的key稱為field(但是hkeys命令為什么不叫hfields命令呢哈哈),也就是value是一組field-value對。其基本操作命令有hset、hget、
hmset、hmget、hgetall、hkeys和hdel:
HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key field [field ...]
HGETALL key
HKEYS key
HDEL key field [field ...]
List
使用list時,value就是一個string數組,操作這組string時,可以像對待棧一樣使用pop和push操作,但是這個棧兩端都能進行操作;也可以像對待數組一樣使用一個index參數來操作。list的操作命令略雜,主要分為兩類:L開頭的和R開頭的,L代表LEFT或者LIST,進行一些從列表左端進行的操作,或者一些與端無關的操作;R代表RIGHT,進行一些從列表右端進行的操作。
Set
set用于存儲一組不重復的值,也可以進行一些集合的操作,就像數學上的集合,它是無序的。基本操作有sadd和
sismember: SADD key member [member ...] SISMEMBER key member
Sorted Set
sorted set類似set,但是sorted set里每個元素都有一個score,這個score可用于排序和排名。基本操作有
zadd、zcount、zrank: ZADD key score member [score member ...] ZCOUNT key min max ZRANK key memberRedis的持久化
redis提供了不同幅度的持久化選項:
RDB持久化對你的數據集基于特定的時間間隔執行時間點快照。
AOF持久化在每次服務器收到寫操作時記入日志,當服務器重啟時,這些寫操作會再次執行,重構出原始的數據集。
命令以只能追加的方式記入日志,記入的格式與redis協議本身相同。當日志太大時,redis會重寫日志。
如果你想讓你的數據只在服務器運行的時候存在,可以按照你的要求完全關閉持久化功能。
可以在同一個實例中結合使用AOF和RDB。注意,在這種情況下,redis重啟時使用AOF文件重構原始數據集,因為這樣得到的數據集更完整。
最重要的事情就是理解RDB持久化和AOF持久化之間的差別與權衡。先從RDB開始:
RDB RDB的優點:RDB是壓縮的單個文件,表示你的某一時刻的redis數據。RDB文件非常適合備份。假如你把最近24小時中每個小時的RDB文件存檔,并把最近30天每天存儲一個RDB快照。這樣遇到數據災難時你就能容易地恢復各種版本的數據集了。
RDB適用于災難恢復,作為一個單個的緊湊的文件,能夠傳輸到遠端的數據中心,或傳到亞馬遜S3(最好加密)。
RDB把redis的性能最大化。因為對于redis父進程,如果要執行持久化,唯一要做的就是創建一個子進程,而子進程會做所有的事情。父進程不需要執行磁盤I/O或者其它類似操作。
對于數據集較大的情況,相較于AOF,RDB使得重啟更快。
RDB的缺點:在Redis停止工作的情況(例如斷電)下,如果你想要使數據丟失的可能性最小,RDB并不合適。你可以設置不同的保存點,在保存點上會生成RDB(例如至少5分鐘且100次對數據集的寫操作以后。你也可以設置多個保存點)。然而,你通常會設置成每5分鐘或更長時間生成一個RDB快照。在這種情況下,如果redis因為什么原因沒有經過正常關機而停止工作,你會丟失最后幾分鐘的數據。
RDB需要經過fork()通過子進程寫磁盤。如果數據集很大,fork()是非常耗時的,可能導致redis在幾毫秒甚至1秒的時間里停止向客戶端提供服務且CPU性能也不好。AOF也需要fork(),但你可以調節重新日志的頻率而不需要任何犧牲。
AOFAOF的優點:
AOF更加可靠:你可以有不同的文件同步策略:沒有文件同步,每秒同步,每次請求時同步。默認為每秒同步,寫性能也不錯(文件同步使用一個后臺線程,當沒有進行文件同步時,主線程會執行寫操作),你只會丟失1秒內的寫數據。
AOF的日志只能追加,因此也沒有搜索操作,斷電時也不會有丟失問題。即使由于某種原因(磁盤滿或其它原因)導致最后一條命令只記錄了一半,redis-check-aof工具也能很容易的修復它。
當AOF文件太大時,redis能夠在后臺自動重寫AOF。重寫是完全安全的。因為當redis繼續向舊文件追加內容時,產生的新文件包含能夠產生當前數據集的所需要的最小命令集。一但新文件準備好了,redis就會切換到第二個文件,向這個新文件追加內容。
AOF使用一種方便理解和分析的格式,一條一條地記錄所有操作的日志。你可以很容易地導入一個AOF文件。即使你由于錯誤地使用FLUSHALL命令沖掉了所有命令,如果在此期間沒有沒有重寫日志,你仍然可以恢復數據,只需要停止服務器、移除最后一條命令,然后重啟服務器就可以了。
AOF的缺點相較于相同數據集同等情況下的RDB文件來說,AOF文件通過很大。
由于精確同步策略,AOF比RDB慢。通常情況下,每秒文件同步的性能仍然很好,而無文件同步的AOF和RDB的速度一樣快,即使是在高負載的情況下。然而,對于大量的潛在問題,RDB還能提供更多的保障,即使是大規模的寫。
以前,我們對某些特殊的命令(例如一個涉及到阻塞的命令,BRPOPLPUSH)測出的bug很少,導致生成的AOF文件不能在重新加載時生成完全一樣的數據集。這個bug不常見。我們在測試時自動創建隨意的復雜的數據集并重新加載它們,檢查是否一切正常。但這種問題在RDB持久中幾乎不存在。更清楚地講:Redis的AOF的工作原理是更新一個已經存在的狀態,類似MySQL和MongoDB的作法,而RDB一次又一次地生成快照,這從理論上更健壯。然而,(1)注意,每次redis重寫AOF時,它是從數據集中實際的數據開始,相對于一味向AOF追加(或重寫時讀取舊的AOF而不是內存中的數據)來說,這使它更強壯【1】。(2)我們至今沒有發現一個來自用戶的在真實使用中檢測出AOF丟失數據的報告。
以上是對Redis的一個基本介紹以及一些基本的使用說明。相信你在使用Redis后一定會對它愛不釋手的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61910.html
摘要:重啟服務,配置文件就會生效。命令以只能追加的方式記入日志,記入的格式與協議本身相同。因為對于父進程,如果要執行持久化,唯一要做的就是創建一個子進程,而子進程會做所有的事情。需要經過通過子進程寫磁盤。 什么是NoSQL?為什么要用NoSQL? 指web1.0時代以來,我們一直在使用關系型數據庫,例如比較流行的關系型數據庫有MySQL,SQL SERVER Oracle,但隨著Web2.0...
摘要:它通常被稱為數據結構服務器,因為值可以是字符串哈希列表集合和有序集合等類型。表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。管理方便,后續可自行增加或摘除節點,移動分槽等等。 本文已獲得原作者霸都民工哥授權。 1、Redis 簡介 REmote DIctionary Server(Redis) ?是一個由 Salvatore Sanfilippo寫的 key-value 存儲...
閱讀 786·2021-11-12 10:36
閱讀 3363·2021-09-08 10:44
閱讀 2739·2019-08-30 11:08
閱讀 1392·2019-08-29 16:12
閱讀 2667·2019-08-29 12:24
閱讀 888·2019-08-26 10:14
閱讀 675·2019-08-23 18:32
閱讀 1160·2019-08-23 17:52