Java使用Redis初探,javaredis初探
Redis的相關概念不做介紹了,大家也可以先瞭解下Memcached,然後比較下二者的區別,就會有個整體的印象。
伺服器端通常選擇Linux , Redis對於linux是官方支援的,使用資料很多,需要下載相關伺服器端程式 ,然後解壓安裝。因為能力和條件有限,我只簡單介紹下windows上如何安裝和使用,有興趣的可以娛樂一下。
伺服器端程式:https://github.com/ServiceStack/redis-windows.git
如果不好操作的話到這來:http://download.csdn.net/detail/u013283727/8212831
下載完後使用cmd進入下載檔案的目錄中,嘗試以下操作:
Microsoft Windows [Version 6.1.7601]Copyright (c) 2009 Microsoft Corporation. All rights reserved.C:\>cd redis64-latestC:\redis64-latest>redis-server redis.windows.conf --maxmemory 200m _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 2.8.17 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 4552 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-'[4552] 01 Dec 13:38:53.147 # Server started, Redis version 2.8.17[4552] 01 Dec 13:38:53.147 * DB loaded from disk: 0.000 seconds[4552] 01 Dec 13:38:53.147 * The server is now ready to accept connections on port 6379
用戶端使用java程式來串連,在這裡介紹兩種常用的方法
(Jar包直接找maven要:http://www.mvnrepository.com 一搜就出來了)
1.Redisson
/** * @author fcs * Redisson Example */public class RedissonTest {public static void main(String[] args) {//1.初始化Config config = new Config();config.setConnectionPoolSize(10);config.addAddress("127.0.0.1:6379");Redisson redisson = Redisson.create(config);System.out.println("redis串連接成功。。。。。");//2.測試concurrentMap,put時候就會同步到redis中ConcurrentMap<String, String> map = redisson.getMap("firstMap");map.put("changshengfeng", "男");map.put("yongtaoliu", "男");map.put("qiaozhu", "女");ConcurrentMap resultMap = redisson.getMap("firstMap");System.out.println("resultMap == "+resultMap.keySet());//關閉串連redisson.shutdown();}}
2.Jedis
/** * @author fcs * test about jedis * Dec 1, 2014 */public class JedisTest {private static Jedis jedis;@Beforepublic void setup(){jedis = new Jedis("127.0.0.1", 6379);System.out.println("Redis伺服器已串連....");//jedis.auth("admin"); //許可權驗證}/** * redis 儲存字串 */@Testpublic void testString(){//添加資料jedis.set("name", "fcs");System.out.println(jedis.get("name"));//擷取結果jedis.append("name", "is handsome");//拼接jedis.del("name");//刪除某個鍵System.out.println(jedis.get("name"));jedis.mset("name","changsheng","age","22","qq","646653132");//設定多個索引值對jedis.incr("age");//加1操作 在投票中可能用的上System.out.println(jedis.get("name")+"--"+jedis.get("age")+"--"+jedis.get("qq"));}/** * 操作List */@Testpublic 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 第二個是其實位置 第三個是結束位置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");//再取出所有資料jedis.lrange是按範圍取出 第一個是key 第二個是其實位置 第三個是結束位置System.out.println(jedis.lrange("java framework", 0, -1));}/** * 操作Set */@Testpublic void testSet(){jedis.sadd("haha", "why");jedis.sadd("haha", "you");jedis.sadd("haha", "so");jedis.sadd("haha", "diao");jedis.sadd("haha", "?");//移除jedis.srem("haha", "?");System.out.println("判斷?是不是haha集合的元素:"+jedis.sismember("haha", "?"));System.out.println("擷取所有加入的value:"+jedis.smembers("haha"));System.out.println("返回給定集合名的一個隨機的value:"+jedis.srandmember("haha"));System.out.println("返回集合的元素個數:"+jedis.scard("haha"));}/** * redis 操作map */@Testpublic void testmap(){Map<String,String> map = new HashMap<String, String>();map.put("name", "小露");map.put("sex", "男");map.put("email", "haha@fcs.com");jedis.hmset("user", map);//相當於給map再取一個名字List<String> rsmap = jedis.hmget("user", "name","sex");//後面是一個可變參數列表 去某個map中的一些key代表的值System.out.println(rsmap);//刪除map中的某個索引值jedis.hdel("user", "email");System.out.println("刪除後----email"+jedis.hmget("user", "email"));System.out.println("是否存在key為user的記錄:"+jedis.exists("user"));System.out.println("key為user的map中存放的值的個數:"+jedis.hlen("user"));System.out.println("返回map對象中所有的key:"+jedis.hkeys("user"));System.out.println("返回map對象中所有的value:"+jedis.hvals("user"));//使用迭代器Iterator<String> iter = jedis.hkeys("user").iterator();System.out.println("***************使用迭代器***************");while(iter.hasNext()){String key = iter.next();//每次向後越過一個對象System.out.println(key+":"+jedis.hmget("user", key));//迭代key 根據key再取值value}}/** * 這裡在前面執行完之後直接再去拿值 試試這些進駐記憶體的資料是否還在 * 可以把伺服器端關掉再重啟 再直接運行這個方法看看 * 如果還有資料就說明該資料庫自動完成了持久化 它有預設的持久化機制 */@Testpublic void testNoSet(){Iterator<String> iter = jedis.hkeys("user").iterator();System.out.println("***************使用迭代器***************");while(iter.hasNext()){String key = iter.next();//每次向後越過一個對象System.out.println(key+":"+jedis.hmget("user", key));//迭代key 根據key再取值value}}//@AfterClass 測試整個類時可以用 會關閉伺服器端程式//public static void close(){//jedis.shutdown();//不能用@After 不然每次執行完一個方法都會關閉伺服器//System.out.println("串連已關閉.....");//}}
這時候可以看到cmd中有一些日誌記錄:(這就是它預設的持久化機制,可以在redis.windows.conf設定檔中查看)
[3972] 01 Dec 13:59:04.073 * 1 changes in 900 seconds. Saving...[3972] 01 Dec 13:59:04.229 # fork operation complete[3972] 01 Dec 13:59:04.229 * Background saving terminated with success[3972] 01 Dec 14:20:05.127 * 1 changes in 900 seconds. Saving...[3972] 01 Dec 14:20:05.267 # fork operation complete[3972] 01 Dec 14:20:05.267 * Background saving terminated with success[3972] 01 Dec 14:35:06.074 * 1 changes in 900 seconds. Saving...[3972] 01 Dec 14:35:06.204 # fork operation complete[3972] 01 Dec 14:35:06.224 * Background saving terminated with success
哎,先到這吧。。。。