第一步 下載好redis和管理工具

為了方便下載,我這里分享了自己的工具,百度鏈接:http://pan.baidu.com/s/1qYfQlsS 密碼:kgxk

我這是redis 3.0.1 win64版的,目錄結構如下:

java管理例外_redis

第二步 雙擊redis-server.exe啟動redis,默認本地IP,端口6379 界面如下:

java管理例外_redis_02

然后安裝好redis管理工具(RedisDesktopManager),並打開如圖:

java管理例外_java_03

當然左邊的redis連接列還沒有,還得建立連接。

點擊add New Connection,添加剛剛啟動的redis連接 。如圖:

java管理例外_java管理例外_04

給要連接的redis一個名稱,然后ip 可以是localhost或127.0.0.1,端口6379。若給redis設置過密碼,則需要填寫Auth,然后ok就好了,左邊會顯示你已連接的redis。

比如點開redis1,展開redis1的數據,目前只存了db0,點擊具體數據項后右邊顯示具體數據,可修改刪除。如圖:

java管理例外_redis_05

第三步 java操作redis

java操作redis,需要導入jedis.jar 包,我上傳了jedis-2.4.2.jar。代碼上和jdbc也差不太多,下面我就直接貼代碼了:package redis;

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 取redis 連接池
*/
public class RedisClientPool{
public static RedisClientPool redisClientPool = getInstance();
public static JedisPool jedisPool;
public static synchronized RedisClientPool getInstance()
{
if (null == redisClientPool){
redisClientPool = new RedisClientPool();
}
return redisClientPool;
}
public RedisClientPool(){
if (null == jedisPool){
init();
}
}
/**
* 初始化Jedis
* 
* 
*@return
*@see [類、類#方法、類#成員]
*/
private static JedisPoolConfig initPoolConfig(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 控制一個pool最多有多少個狀態為idle的jedis實例
jedisPoolConfig.setMaxIdle(1000);
// 最大能夠保持空閑狀態的對象數
jedisPoolConfig.setMaxIdle(300);
// 超時時間
jedisPoolConfig.setMaxWaitMillis(1000);
// 在borrow一個jedis實例時,是否提前進行alidate操作;如果為true,則得到的jedis實例均是可用的;
jedisPoolConfig.setTestOnBorrow(true);
// 在還會給pool時,是否提前進行validate操作
jedisPoolConfig.setTestOnReturn(true);
return jedisPoolConfig;
}
/**
* 初始化jedis連接池
*/
public static void init(){
JedisPoolConfig jedisPoolConfig = initPoolConfig();
String host = "localhost";
int port = 6379;
int timeout = 100000;
//String password = "@caoyn";
// 構造連接池
jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
}
public static void main(String[] args) {
RedisClientPool redisClientPool1 = getInstance();
redisClientPool1.jedisPool.getResource().append("name", "曹大達");
System.out.println("已緩存成功");
}
}
下面直接使用redis連接池:package redis;
import redis.RedisClientPool;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import redis.clients.jedis.Jedis;
/**
* redis 操作api
*/
public class RedisClient
{
/**
* 保存數據 類型為 Map
* 
* 
*@param flag
*@param mapData
*@see [類、類#方法、類#成員]
*/
public static void setMapDataToRedis(String flag,Map mapData)
{
Jedis redisClient = null;
try
{
redisClient = RedisClientPool.jedisPool.getResource();
redisClient.hmset(flag,mapData);
}
catch (Exception e)
{
// 銷毀對象
RedisClientPool.jedisPool.returnBrokenResource(redisClient);
}
finally
{
// 還原到連接池
RedisClientPool.jedisPool.returnResource(redisClient);
}
}
/**
* 保存數據 類型為 key-value
* 
* 
*@param flag
*@param field
*@param value
*@see [類、類#方法、類#成員]
*/
public static void setDataToRedis(String flag,String field,String value)
{
Jedis redisClient = null;
try
{
redisClient = RedisClientPool.jedisPool.getResource();
redisClient.hset(flag, field, value);
}
catch (Exception e)
{
// 銷毀對象
RedisClientPool.jedisPool.returnBrokenResource(redisClient);
}
finally
{
// 還原到連接池
RedisClientPool.jedisPool.returnResource(redisClient);
}
}
/**
* 獲取Map數據
* 
* 
*@param flag
*@return
*@see [類、類#方法、類#成員]
*/
public static Map getMapData(String flag)
{
Map dataMap = null;
Jedis redisClient = null;
try
{
redisClient = RedisClientPool.jedisPool.getResource();
dataMap = redisClient.hgetAll(flag);
}
catch (Exception e)
{
// 銷毀對象
RedisClientPool.jedisPool.returnBrokenResource(redisClient);
}
finally
{
// 還原到連接池
RedisClientPool.jedisPool.returnResource(redisClient);
}
return dataMap;
}
public static long deleteData(String flag)
{
long result = 0;
Jedis redisClient = null;
try
{
redisClient = RedisClientPool.jedisPool.getResource();
result = redisClient.del(flag);
}
catch (Exception e)
{
// 銷毀對象
RedisClientPool.jedisPool.returnBrokenResource(redisClient);
}
finally
{
// 還原到連接池
RedisClientPool.jedisPool.returnResource(redisClient);
}
return result;
}
/**
* 根據key和字段獲取數據
* 
* 
*@param flag
*@param field
*@return
*@see [類、類#方法、類#成員]
*/
public static String getData(String flag,String field)
{
String data = null;
Jedis redisClient = null;
try
{
redisClient = RedisClientPool.jedisPool.getResource();
data = redisClient.hget(flag, field);
}
catch (Exception e)
{
// 銷毀對象
RedisClientPool.jedisPool.returnBrokenResource(redisClient);
}
finally
{
// 還原到連接池
RedisClientPool.jedisPool.returnResource(redisClient);
}
return data;
}
public static void main(String[] args) throws Exception{
RedisClient.testMap();
}
public static void testList()
{
Jedis redis = RedisClientPool.jedisPool.getResource();
//hset key field value將哈希表key中的域field的值設為value。
redis.hset("table", "field1", "value1");
redis.hset("table", "field2", "value2");
redis.hset("table", "field3", "value3");
//返回哈希表key中,一個或多個給定域的值。
List list = redis.hmget("table","field1","field2","field3");
for(String tmp : list)
{
System.out.println(tmp);
}
}
public static void testMap()
{
//同時將多個field - value(域-值)對設置到哈希表key中。
Map map = new ConcurrentHashMap();
for (int i = 0;i < 10000;i++){
map.put("field"+i, "value"+i);
}
if (null != getData("table", "field1")){
deleteData("table");
}
//得到map下面的username的值
Map maps = getMapData("table");
System.out.println(maps.size());
setMapDataToRedis("table",map);
//HGETALL key返回哈希表key中,所有的域和值。
maps = getMapData("table");
System.out.println(maps.size());
}
}