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