引言:html
windows下使用redis主要做爲學習之用。Redis發揮性能仍是要在linux環境下的,並且使用起來也更省心。redis本來是沒有windows版本的,windows版本是 Microsoft Open Tech團隊開的。 目前最早版本:2.8java
下載地址:linux
官方的下載地址是: http://redis.io/downloadgit
window版本github的連接地址: https://github.com/MSOpenTech/redis github
安裝環境:window7 64位 6G內存redis
java環境:jdk1.7 spring
開發環境:eclipse數據庫
安裝:windows
下載後解壓到D:\leon\redis,進入cmd命令行,使用管理員權限運行服務器
一、命令行窗口啓動方式啓動:
redis-server redis.windows.conf
關閉命令行窗口就是關閉 redis。
二、redis做爲windows服務啓動方式
redis-server --service-install redis.windows.conf
啓動服務:redis-server --service-start
中止服務:redis-server --service-stop
我採用的第二種方式,而後會發現系統服務中出現Redis服務。
運行:
進入redis安裝目錄,雙擊redis-cli.exe,出現命令窗口,默認是無密碼,不須要驗證的。
查看數據共有多少key,命令dbsize,原始爲0。
密碼設置:
第一種、直接修改配置文件,打開redis.conf文件,找到#requirepass foorbared這一行,直接替換掉這行,改成requirepass 密碼就能夠了。
第二種、運行中命令修改,命令config get requirepass。能夠看見初始化對應的密碼爲空。
接着使用命令 config set requirepass 密碼 更換密碼。
更換成功後,須要從新認證,使用命令 auth 密碼便可。
經常使用命令:
鏈接控制 QUIT 關閉鏈接 AUTH (僅限啓用時)簡單的密碼驗證 適合全體類型的命令 EXISTS key 判斷一個鍵是否存在;存在返回 1;不然返回0; DEL key 刪除某個key,或是一系列key;DEL key1 key2 key3 key4 TYPE key 返回某個key元素的數據類型 ( none:不存在,string:字符,list,set,zset,hash) KEYS pattern 返回匹配的key列表 (KEYS foo*:查找foo開頭的keys) ( keys * :可查看全部的key) RANDOMKEY 隨機得到一個已經存在的key,若是當前數據庫爲空,則返回空字符串 RENAME oldname newname更改key的名字,新鍵若是存在將被覆蓋 RENAMENX oldname newname 更改key的名字,若是名字存在則更改失敗 DBSIZE返回當前數據庫的key的總數 EXPIRE設置某個key的過時時間(秒),(EXPIRE bruce 1000:設置bruce這個key1000秒後系統自動刪除)注意:若是在尚未過時的時候,對值進行了改變,那麼那個值會被清除。 TTL查找某個key還有多長時間過時,返回時間秒 SELECT index 選擇數據庫 MOVE key dbindex 將指定鍵從當前數據庫移到目標數據庫 dbindex。成功返回 1;不然返回0(源數據庫不存在key或目標數據庫已存在同名key); FLUSHDB 清空當前數據庫中的全部鍵 FLUSHALL 清空全部數據庫中的全部鍵 處理字符串的命令 SET key value 給一個鍵設置字符串值。SET keyname datalength data (SET bruce 10 paitoubing:保存key爲burce,字符串長度爲10的一個字符串paitoubing到數據庫),data最大不可超過1G。 GET key獲取某個key 的value值。如key不存在,則返回字符串「nil」;如key的值不爲字符串類型,則返回一個錯誤。
Java版數據調用 代碼來源 :http://www.cnblogs.com/liuling/p/2014-4-19-04.html
鏈接池代碼:
package com.test; /** * @author 做者 leon * @date 建立時間:2016年12月21日 下午2:19:17 * @version 1.0 * @parameter * @since * @return */ import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public final class RedisUtil { //Redis服務器IP private static String ADDR = "127.0.0.1"; //Redis的端口號 private static int PORT = 6379; //訪問密碼 private static String AUTH = "admin"; //可用鏈接實例的最大數目,默認值爲8; //若是賦值爲-1,則表示不限制;若是pool已經分配了maxActive個jedis實例,則此時pool的狀態爲exhausted(耗盡)。 private static int MAX_ACTIVE = 102400; //控制一個pool最多有多少個狀態爲idle(空閒的)的jedis實例,默認值也是8。 private static int MAX_IDLE = 200; //等待可用鏈接的最大時間,單位毫秒,默認值爲-1,表示永不超時。若是超過等待時間,則直接拋出JedisConnectionException; private static int MAX_WAIT = 10000; private static int TIMEOUT = 10000; //在borrow一個jedis實例時,是否提早進行validate操做;若是爲true,則獲得的jedis實例均是可用的; private static boolean TEST_ON_BORROW = true; private static JedisPool jedisPool = null; /** * 初始化Redis鏈接池 */ static { try { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxActive(MAX_ACTIVE); config.setMaxIdle(MAX_IDLE); config.setMaxWait(MAX_WAIT); config.setTestOnBorrow(TEST_ON_BORROW); jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH); } catch (Exception e) { e.printStackTrace(); } } /** * 獲取Jedis實例 * @return */ public synchronized static Jedis getJedis() { try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 釋放jedis資源 * @param jedis */ public static void returnResource(final Jedis jedis) { if (jedis != null) { jedisPool.returnResource(jedis); } } public static void main(String[] args) { // Jedis j =RedisUtil.getJedis(); } }
測試代碼
package com.test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; /** * @author 做者 leon * @date 建立時間:2016年12月21日 下午2:17:56 * @version 1.0 * @parameter * @since * @return */ public class TestRedis { private Jedis jedis; @Before public void setup() { //鏈接redis服務器 // jedis = new Jedis("127.0.0.1", 6379); System.out.println("test setup"); jedis =RedisUtil.getJedis(); //權限認證 // jedis.auth("admin"); } /** * redis存儲字符串 */ @Test public void testString() { System.out.println("====執行方法 testString redis存儲字符串==="); //-----添加數據---------- jedis.set("name","test1");//向key-->name中放入了value-->xinxin System.out.println(jedis.get("name"));//執行結果:xinxin jedis.append("name", " hello world"); //拼接 System.out.println(jedis.get("name")); jedis.del("name"); //刪除某個鍵 System.out.println(jedis.get("name")); //設置多個鍵值對 jedis.mset("name","leon","age","23","qq","你猜"); jedis.incr("age"); //進行加1操做 System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq")); } /** * redis操做Map */ @Test public void testMap() { //-----添加數據---------- Map<String, String> map = new HashMap<String, String>(); map.put("name", "leon"); map.put("age", "22"); map.put("qq", "123456"); jedis.hmset("user",map); //取出user中的name,執行結果:[minxr]-->注意結果是一個泛型的List //第一個參數是存入redis中map對象的key,後面跟的是放入map中的對象的key,後面的key能夠跟多個,是可變參數 List<String> rsmap = jedis.hmget("user", "name", "age", "qq"); System.out.println(rsmap); //刪除map中的某個鍵值 jedis.hdel("user","age"); System.out.println(jedis.hmget("user", "age")); //由於刪除了,因此返回的是null System.out.println(jedis.hlen("user")); //返回key爲user的鍵中存放的值的個數2 System.out.println(jedis.exists("user"));//是否存在key爲user的記錄 返回true System.out.println(jedis.hkeys("user"));//返回map對象中的全部key System.out.println(jedis.hvals("user"));//返回map對象中的全部value 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.del("java framework"); jedis.rpush("java framework","spring"); jedis.rpush("java framework","struts"); jedis.rpush("java framework","hibernate"); System.out.println(jedis.lrange("java framework",0,-1)); } /** * jedis操做Set */ @Test public void testSet(){ //添加 jedis.sadd("user","leon"); jedis.sadd("user","leon1"); jedis.sadd("user","leon2"); jedis.sadd("user","leon3"); jedis.sadd("user","leon4"); //移除noname jedis.srem("user","leon4"); System.out.println(jedis.smembers("user"));//獲取全部加入的value System.out.println(jedis.sismember("user", "leon4"));//判斷 leon4 是不是user集合的元素 System.out.println(jedis.srandmember("user")); System.out.println(jedis.scard("user"));//返回集合的元素個數 } @Test public void test() throws InterruptedException { //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)); } @Test public void testRedisPool() { SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calendar.getInstance(); System.out.println("begin時間:"+f.format(c.getTime())); try { for (int i = 0; i < 100000; i++) { RedisUtil.getJedis().set("newname_"+i, "中文測試"+i); // System.out.println(RedisUtil.getJedis().get("newname"+i)); } } catch (Exception e) { e.printStackTrace(); }finally{ RedisUtil.returnResource(jedis); } Calendar c2 = Calendar.getInstance(); System.out.println("結束時間:" + f.format(c.getTime())); long aTime = c.getTimeInMillis(); long bTime = c2.getTimeInMillis(); long cTime = aTime - bTime; long sTime = cTime / 1000;// 時間差,單位:秒 long mTime = sTime / 60; long hTime = mTime / 60; long dTime = hTime / 24; System.out.println("時間差:"+dTime+"天"+hTime%24+"時"+mTime%60+"分"+sTime%60+"秒"); } }
經測試testRedisPool方法,10萬條數據,用時1分50秒,基本1分鐘1000條。