前言: Redis是當前比較熱門的NOSQL系統之一,它是一個key-value存儲系統。和Memcache相似,但很大程度補償了Memcache的不足,它支持存儲的value類型相對更多,包括string、list、set、zset和hash。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做。在此基礎上,Redis支持各類不一樣方式的排序。html
和Memcache同樣,Redis數據都是緩存在計算機內存中,不一樣的是,Memcache只能將數據緩存到內存中,沒法自動按期寫入硬盤,這就表示,一斷電或重啓,內存清空,數據丟失。因此Memcache的應用場景適用於緩存無需持久化的數據。而Redis不一樣的是它會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,實現數據的持久化。linux
Redis官方網網站是:http://www.redis.io/ windows環境下,http://www.redis.io/download 下載安裝文件,安裝便可。 Linux環境下,參考:http://www.jb51.net/article/79096.htm http://www.linuxdiyf.com/linux/13401.html Redis客戶端工具:win8環境嫌安裝redis-desktop-manager麻煩,乾脆用redisclient,下載安裝便可
一、pom.xml中引入以下jar:redis
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <!-- 序列化工具--> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.12</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.12</version> </dependency>
二、spring配置文件建立redis訪問資源路徑:spring
<!-- 配置redis訪問路徑 --> <bean id="redisDao" class="com.lcsuo.dao.RedisDao"> <constructor-arg index="0" value="127.0.0.1" /> <constructor-arg index="1" value="6379" /> </bean>
三、編寫RedisDao類數據庫
package com.lcsuo.dao; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import com.dyuproject.protostuff.LinkedBuffer; import com.dyuproject.protostuff.ProtobufIOUtil; import com.dyuproject.protostuff.runtime.RuntimeSchema; public class RedisUtils { private static JedisPool jedisPool; private static final String PASSWORD = "123456"; public RedisUtils(String ip, int port){ this.jedisPool = new JedisPool(ip, port); } /** * 設置單個值 * * @param key * @param value * @return */ public static String set(String key, String value) { return set(0, key, value, 0); } /** * 設置單個值 * * @param dbNumber 指定數據庫 * @param key * @param value * @param expire有效時間單位 秒,爲0時不失效 * @return */ public static String set(int dbNumber,String key, String value,int expire) { try(Jedis jedis = jedisPool.getResource()){ jedis.auth(PASSWORD); return jedis.set(key, value); }catch (Exception e) { e.printStackTrace(); } return null; } /** * 獲取單個值 * * @param key * @return */ public static String get(String key) { return get(0, key); } /** * 獲取單個值 * * @param key * @return */ public static String get(int dbNumber,String key) { try(Jedis jedis = jedisPool.getResource()){ jedis.auth(PASSWORD); return jedis.get(key); }catch (Exception e) { e.printStackTrace(); } return null; } public static Object setObject(String key, Object obj){ return setObject(0,key,obj,0); } /** * 保存對象 * @param key * @param obj * @return */ public static Object setObject(int dbNumber, String key, Object obj, int expire){ RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class); try(Jedis jedis = jedisPool.getResource()){ jedis.auth(PASSWORD); //序列化 byte[] byteArray = ProtobufIOUtil.toByteArray(obj, schema, LinkedBuffer.allocate(512)); int seconds = 3600; return jedis.setex(key.getBytes(), seconds, byteArray); }catch (Exception e) { e.printStackTrace(); } return null; } public static Object getObject(String key){ getObject(0,key); return null; } /** * 獲取對象 * @param dbNumber * @param key * @return */ public static Object getObject(int dbNumber,String key){ RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class); try(Jedis jedis = jedisPool.getResource()){ jedis.auth(PASSWORD); byte[] bs = jedis.get(key.getBytes()); //反序列化 if(bs != null){ Object obj = schema.newMessage(); ProtobufIOUtil.mergeFrom(bs, obj, schema); return obj; } }catch (Exception e) { e.printStackTrace(); } return null; } }