qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          十分簡(jiǎn)單的redis使用說(shuō)明及性能測(cè)試

            redis相比很多人都知道,是一個(gè)內(nèi)存式的key-value數(shù)據(jù)庫(kù),存取速度極快,使用非常簡(jiǎn)單,支持多種語(yǔ)言。本文對(duì)其使用進(jìn)行一個(gè)簡(jiǎn)要說(shuō)明,并進(jìn)行簡(jiǎn)單測(cè)試
            1.下載與編譯
            可以從redis官網(wǎng)下載最新的源碼包:http://www.redis.io/
            編譯十分簡(jiǎn)單make既可。
            2.redis安裝與配置
            實(shí)際上并不需要安裝。redis編譯后會(huì)在src目錄下生成redis-server,它是一個(gè)可執(zhí)行文件,即啟動(dòng)redis服務(wù)。不過(guò)它需要一個(gè)配置文件。配置文件寫法網(wǎng)上很多了,這里直接給出一個(gè)示例:
          daemonize yes
          pidfile /tmp/redis/var/redis.pid
          port 6379
          timeout 300
          loglevel debug
          logfile /tmp/redis/var/redis.log
          databases 16
          save 900 1
          save 300 10
          save 60 10000
          rdbcompression yes
          dbfilename dump.rdb
          dir /tmp/redis/var/
          appendonly no
          appendfsync always
          #glueoutputbuf yes
          #shareobjects no
          #shareobjectspoolsize 1024
            將其保存為redis.conf
            然后直接運(yùn)行./redis-server redis.conf就可以啟動(dòng)redis服務(wù)了,是不是很方便呢?
            3.C/C++訪問(wèn)redis
            在redis源碼目錄下有一個(gè)deps目錄,下面有一個(gè)hiredis目錄。redis編譯時(shí)會(huì)自動(dòng)編譯該目錄生成libhiredis.a,通過(guò)引用hiredis.h 和 libhiredis.a就可以訪問(wèn)redis了。具體步驟如下:
            1)創(chuàng)建一個(gè)redisContext
            2)通過(guò)redisContext執(zhí)行命令
            3)從返回redisReply中獲取所需數(shù)據(jù)
            代碼如下:
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp">redisContext *  c = redisConnect((char *)"192.168.150.135",6379);
          const char * pData = "this is a test";
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp">redisReply *reply1 = (redisReply *)redisCommand(c,"SET 100 %s",pData);
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_2_9509153" name="code" class="cpp">freeReplyObject(reply1);</pre>
          <pre></pre>
          <pre></pre>
          <pre></pre>
          <pre></pre>
          <pre></pre>
          <p></p>
          <pre></pre>
          <pre></pre>
          <br>
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_3_730653" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_3_730653" name="code" class="cpp"><pre code_snippet_id="151033" snippet_file_name="blog_20140110_3_730653" name="code" class="cpp">redisReply *reply2 = (redisReply *)redisCommand(c,"GET 100");</pre>
          <pre></pre>
          <pre></pre>
          printf("%s\n",reply2->str);<br>
          freeReplyObject(reply2);<br>
          <pre></pre>
          <pre></pre>
          <pre></pre>
            是不是非常簡(jiǎn)單呢?
          <p></p>
          <p>不過(guò)需要注意的是,redis接受的數(shù)據(jù)是字符串,對(duì)于二進(jìn)制數(shù)據(jù),可以通過(guò)base64編碼來(lái)解決。具體可參看我的另一篇文章。</p>
          <p></p>
          <h1><a name="t3"></a>4.Java訪問(wèn)redis</h1>
          <p>redis可以支持多種語(yǔ)言,當(dāng)然也可以支持Java。</p>
          <p>首先需要下載redis的java包。jedis.jar。這里提供一個(gè)下載地址:<a target="_blank" >redis的Java客戶端jedis</a></p>
          <p>使用如下:</p>
          <p></p>
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_4_2824204" name="code" class="java">Jedis jedis = new Jedis("192.168.150.135");
          jedis.set("100","this is a test");
          String data = jedis.get("100");
          </pre><br>
          <br>
          <p></p>
          <h1><a name="t4"></a>5.性能測(cè)試</h1>
          <p>測(cè)試方法:向redis寫一個(gè)1M的數(shù)據(jù),分別寫10次,讀10次,計(jì)算其耗時(shí)。分C++和Java兩個(gè)版本進(jìn)行測(cè)試。<br>
          </p>
          <h2><a name="t5"></a>C++測(cè)試代碼</h2>
          <p></p>
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_5_8505805" name="code" class="cpp">#include <stdio.h>
          #include "hiredis.h"
          #include <string.h>
          #include <time.h>
          int main(int argc, char **argv)
          {
          printf("CLOCKS_PER_SEC:%d\n",CLOCKS_PER_SEC);
          redisContext *c;
          redisReply *reply;
          c = redisConnect((char *)"one-60",6379);
          char * pData;
          reply = (redisReply *)redisCommand(c,"GET 0");
          int size = strlen(reply->str);
          pData = new char[size+1];
          strcpy(pData,reply->str);
          freeReplyObject(reply);
          clock_t start, finish;
          start = clock();
          for(int i=0;i<10; i++)
          {
          reply = (redisReply *)redisCommand(c,"GET %d",i);
          freeReplyObject(reply);
          }
          finish = clock();
          double duration = (double)(finish - start) / CLOCKS_PER_SEC*1000;
          printf("GET Time used:%f ms.\n",duration);
          start = clock();
          for(int i=0;i<10; i++)
          {
          reply = (redisReply *)redisCommand(c,"SET %d %s",i,pData);
          freeReplyObject(reply);
          }
          finish = clock();
          duration = (double)(finish - start) / CLOCKS_PER_SEC*1000;
          printf("SET Time used:%f ms.\n",duration);
          delete []pData;
          redisFree(c);
          }
          </pre>測(cè)試結(jié)果
          <p></p>
          <p></p>
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_6_1363508" name="code" class="plain">CLOCKS_PER_SEC:1000000
          GET Time used:190.000000 ms.
          SET Time used:70.000000 ms.
          </pre><br>
          <br>
          <p></p>
          <h2><a name="t6"></a>Java測(cè)試代碼<br>
          </h2>
          <p></p>
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_7_633160" name="code" class="java">import java.io.BufferedReader;
          import java.io.File;
          import java.io.FileReader;
          import java.util.Date;
          import redis.clients.jedis.Jedis;
          public class JedisTest {
          public static void main(String[] args)
          {
          Jedis jedis = new Jedis("10.100.211.232");
          String f = "/tmp/e2.txt.backup";
          try
          {
          File file = new File(f);
          BufferedReader reader = new BufferedReader(new FileReader(file));
          String data = reader.readLine();
          reader.close();
          Date start = new Date();
          for(int i=0; i<10; i++)
          {
          jedis.set(i+"", data);
          }
          Date end = new Date();
          System.out.println("Set used(ms):"+(end.getTime()-start.getTime()));
          start = new Date();
          for(int i=0; i<10; i++)
          {
          String v = jedis.get(i+"");
          }
          end = new Date();
          System.out.println("Get used(ms):"+(end.getTime()-start.getTime()));
          }catch (Exception e)
          {
          e.printStackTrace();
          }
          jedis.disconnect();
          }
          }</pre><br>
            測(cè)試結(jié)果
          <p></p>
          <p></p>
          <pre code_snippet_id="151033" snippet_file_name="blog_20140110_8_8615272" name="code" class="plain">Set used(ms):1212
          Get used(ms):1437</pre><br>
            6.總結(jié)
          <p></p>
          <p>redis效率還是非常高的,讀寫1M數(shù)據(jù)的數(shù)據(jù),耗時(shí)都在10ms左右。<br>
          </p>
          <p><br>
          </p>
          <pre></pre>
          <pre></pre>
          </pre></pre></pre></pre></pre></pre>

          posted on 2014-01-16 11:38 順其自然EVO 閱讀(1296) 評(píng)論(0)  編輯  收藏 所屬分類: 性能測(cè)試

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 张家口市| 荣昌县| 铁岭市| 襄垣县| 崇仁县| 洛南县| 广州市| 马龙县| 定远县| 区。| 苍南县| 曲麻莱县| 关岭| 东丰县| 呼图壁县| 平泉县| 肇州县| 洞头县| 循化| 南靖县| 安阳市| 桦川县| 会宁县| 永胜县| 泰和县| 斗六市| 金溪县| 南投市| 慈溪市| 家居| 田林县| 晋州市| 莱州市| 琼海市| 安西县| 井陉县| 阜平县| 丰顺县| 十堰市| 庆阳市| 金塔县|