Windows下Redis的安裝使用

摘要   redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從...

 

目錄[-]java

  • 0.前言
  • 1.安裝Redis
  • 2.啓動Redis
  • 3.測試使用
  • 4.Java開發包Jedis

0.前言

    由於是初次使用,因此是在windows下進行安裝和使用,參考了幾篇博客,下面整理一下git

1.安裝Redis

官方網站:http://redis.io/github

官方下載:http://redis.io/download 能夠根據須要下載不一樣版本web

windows版:https://github.com/MSOpenTech/redisredis

github的資源能夠ZIP直接下載的(這個是給不知道的同窗友情提示下)spring

下載完成後 能夠右鍵解壓到 某個硬盤下 好比D:\Redis\redis-2.6shell

在D:\Redis\redis-2.6\bin\release下 有兩個zip包 一個32位一個64位 數據庫

根據本身windows的位數 解壓到D:\Redis\redis-2.6 根目錄下windows

 

Redis安裝文件解壓後,有如下幾個文件。見下圖

redis-server.exe:服務程序
redis-check-dump.exe:本地數據庫檢查
redis-check-aof.exe:更新日誌檢查
redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢 (相似於 Apache 的ab 工具).緩存

2.啓動Redis

進入redis目錄後 開啓服務  (注意加上redis.conf)

?
1
redis-server.exe redis.conf

這個窗口要保持開啓  關閉時redis服務會自動關閉

redis會自動保存數據到硬盤 因此圖中是我第二次開啓時 多了一個 DB loaded from disk

 

設置一個Key並獲取返回的值:

Java代碼 收藏代碼

  1. $ ./redis-cli set mykey somevalue 
  2. OK 
  3. $ ./redis-cli get mykey 
  4. Somevalue 

 

如何添加值到list: 

Java代碼 收藏代碼

  1. $ ./redis-cli lpush mylist firstvalue 
  2. OK 
  3. $ ./redis-cli lpush mylist secondvalue 
  4. OK 
  5. $ ./redis-cli lpush mylist thirdvalue 
  6. OK 
  7. $ ./redis-cli lrange mylist 0 -1
  8. . thirdvalue 
  9. . secondvalue 
  10. . firstvalue 
  11. $ ./redis-cli rpop mylist 
  12. firstvalue 
  13. $ ./redis-cli lrange mylist 0 -1
  14. . thirdvalue 
  15. . secondvalue 

 

redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢 (相似於 Apache 的 ab 工具).

Java代碼 收藏代碼

  1. ./redis-benchmark -n 100000 –c 50
  2.     ====== SET ====== 
  3. 100007 requests completed in 0.88 seconds (譯者注:100004 查詢完成於 1.14 秒 ) 
  4. 50 parallel clients (譯者注:50個併發客戶端) 
  5. 3 bytes payload (譯者注:3字節有效載荷) 
  6. keep alive: 1 (譯者注:保持1個鏈接) 
  7. 58.50% <= 0 milliseconds(譯者注:毫秒) 
  8. 99.17% <= 1 milliseconds 
  9. 99.58% <= 2 milliseconds 
  10. 99.85% <= 3 milliseconds 
  11. 99.90% <= 6 milliseconds 
  12. 100.00% <= 9 milliseconds 
  13. 114293.71 requests per second(譯者注:每秒 114293.71 次查詢) 

Windows下測試併發客戶端極限爲60

3.測試使用

另外開啓一個命令行窗口 進入redis目錄下 (注意修改本身的ip)

?
1
redis-cli.exe -h 192.168.10.61 -p 6379

4.Java開發包Jedis

Jedis :http://www.oschina.net/p/jedis (Redis的官方首選Java開發包)

?
1
2
3
4
5
6
7
8
<!--Redis -->
        < dependency >
            < groupId >redis.clients</ groupId >
            < artifactId >jedis</ artifactId >
            < version >2.0.0</ version >
            < type >jar</ type >
            < scope >compile</ scope >
        </ dependency >

測試例子原帖:http://flychao88.iteye.com/blog/1527163

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.lujianing.utils;
 
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
  * Created by lujianing on 14-2-28.
  */
public class JedisUtilTest {
 
 
 
        JedisPool pool;
        Jedis jedis;
        @Before
        public void setUp() {
            pool = new JedisPool( new JedisPoolConfig(), "192.168.10.61" );
 
            jedis = pool.getResource();
         //   jedis.auth("password");
        }
 
 
        @Test
        public void testGet(){
            System.out.println(jedis.get( "lu" ));
        }
 
        /**
         * Redis存儲初級的字符串
         * CRUD
         */
        @Test
        public void testBasicString(){
            //-----添加數據----------
            jedis.set( "name" , "minxr" ); //向key-->name中放入了value-->minxr
            System.out.println(jedis.get( "name" )); //執行結果:minxr
 
            //-----修改數據-----------
            //一、在原來基礎上修改
            jedis.append( "name" , "jarorwar" );   //很直觀,相似map 將jarorwar append到已經有的value以後
            System.out.println(jedis.get( "name" )); //執行結果:minxrjarorwar
 
            //二、直接覆蓋原來的數據
            jedis.set( "name" , "閔曉榮" );
            System.out.println(jedis.get( "name" )); //執行結果:閔曉榮
 
            //刪除key對應的記錄
            jedis.del( "name" );
            System.out.println(jedis.get( "name" )); //執行結果:null
 
            /**
             * mset至關於
             * jedis.set("name","minxr");
             * jedis.set("jarorwar","閔曉榮");
             */
            jedis.mset( "name" , "minxr" , "jarorwar" , "閔曉榮" );
            System.out.println(jedis.mget( "name" , "jarorwar" ));
 
        }
 
        /**
         * jedis操做Map
         */
        @Test
        public void testMap(){
            Map<String,String> user= new HashMap<String,String>();
            user.put( "name" , "minxr" );
            user.put( "pwd" , "password" );
            jedis.hmset( "user" ,user);
            //取出user中的name,執行結果:[minxr]-->注意結果是一個泛型的List
            //第一個參數是存入redis中map對象的key,後面跟的是放入map中的對象的key,後面的key能夠跟多個,是可變參數
            List<String> rsmap = jedis.hmget( "user" , "name" );
            System.out.println(rsmap);
 
            //刪除map中的某個鍵值
//        jedis.hdel("user","pwd");
            System.out.println(jedis.hmget( "user" , "pwd" )); //由於刪除了,因此返回的是null
            System.out.println(jedis.hlen( "user" )); //返回key爲user的鍵中存放的值的個數1
            System.out.println(jedis.exists( "user" )); //是否存在key爲user的記錄 返回true
            System.out.println(jedis.hkeys( "user" )); //返回map對象中的全部key  [pwd, name]
            System.out.println(jedis.hvals( "user" )); //返回map對象中的全部value  [minxr, password]
 
            Iterator<String> iter=jedis.hkeys( "user" ).iterator();
            while (iter.hasNext()){
                String key = iter.next();
                System.out.println(key+ ":" +jedis.hmget( "user" ,key));
            }
 
        }
 
        /**
         * jedis操做List
         */
        @Test
        public void testList(){
            //開始前,先移除全部的內容
            jedis.del( "java framework" );
            System.out.println(jedis.lrange( "java framework" , 0 ,- 1 ));
            //先向key java framework中存放三條數據
            jedis.lpush( "java framework" , "spring" );
            jedis.lpush( "java framework" , "struts" );
            jedis.lpush( "java framework" , "hibernate" );
            //再取出全部數據jedis.lrange是按範圍取出,
            // 第一個是key,第二個是起始位置,第三個是結束位置,jedis.llen獲取長度 -1表示取得全部
            System.out.println(jedis.lrange( "java framework" , 0 ,- 1 ));
        }
 
        /**
         * jedis操做Set
         */
        @Test
        public void testSet(){
            //添加
            jedis.sadd( "sname" , "minxr" );
            jedis.sadd( "sname" , "jarorwar" );
            jedis.sadd( "sname" , "閔曉榮" );
            jedis.sadd( "sanme" , "noname" );
            //移除noname
            jedis.srem( "sname" , "noname" );
            System.out.println(jedis.smembers( "sname" )); //獲取全部加入的value
            System.out.println(jedis.sismember( "sname" , "minxr" )); //判斷 minxr 是不是sname集合的元素
            System.out.println(jedis.srandmember( "sname" ));
            System.out.println(jedis.scard( "sname" )); //返回集合的元素個數
        }
 
        @Test
        public void test() throws InterruptedException {
            //keys中傳入的能夠用通配符
            System.out.println(jedis.keys( "*" )); //返回當前庫中全部的key  [sose, sanme, name, jarorwar, foo, sname, java framework, user, braand]
            System.out.println(jedis.keys( "*name" )); //返回的sname   [sname, name]
            System.out.println(jedis.del( "sanmdde" )); //刪除key爲sanmdde的對象  刪除成功返回1 刪除失敗(或者不存在)返回 0
            System.out.println(jedis.ttl( "sname" )); //返回給定key的有效時間,若是是-1則表示永遠有效
            jedis.setex( "timekey" , 10 , "min" ); //經過此方法,能夠指定key的存活(有效時間) 時間爲秒
            Thread.sleep( 5000 ); //睡眠5秒後,剩餘時間將爲<=5
            System.out.println(jedis.ttl( "timekey" ));   //輸出結果爲5
            jedis.setex( "timekey" , 1 , "min" );        //設爲1後,下面再看剩餘時間就是1了
            System.out.println(jedis.ttl( "timekey" ));  //輸出結果爲1
            System.out.println(jedis.exists( "key" )); //檢查key是否存在
            System.out.println(jedis.rename( "timekey" , "time" ));
            System.out.println(jedis.get( "timekey" )); //由於移除,返回爲null
            System.out.println(jedis.get( "time" )); //由於將timekey 重命名爲time 因此能夠取得值 min
 
            //jedis 排序
            //注意,此處的rpush和lpush是List的操做。是一個雙向鏈表(但從表現來看的)
            jedis.del( "a" ); //先清除數據,再加入數據進行測試
            jedis.rpush( "a" , "1" );
            jedis.lpush( "a" , "6" );
            jedis.lpush( "a" , "3" );
            jedis.lpush( "a" , "9" );
            System.out.println(jedis.lrange( "a" , 0 ,- 1 )); // [9, 3, 6, 1]
            System.out.println(jedis.sort( "a" )); //[1, 3, 6, 9]  //輸入排序後結果
            System.out.println(jedis.lrange( "a" , 0 ,- 1 ));
 
        }
 
 
}

Redis會定時 保存數據到硬盤上

相關文章
相關標籤/搜索