redis缓存Hash操作的在主数据中的应用

Redis hash是一个string类型的field和value的映射表.一个key可对应多个field,一个field对应一个value

1、如何主数据在redis缓存中实现初始化?

1)加载主数据,建立MasterMain.java

 

package com.taikang.healthcare.master.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

import com.taikang.healthcare.master.dao.BaseCodeMapper;
import com.taikang.healthcare.master.dao.RedisDao;
import com.taikang.healthcare.master.model.BaseCode;
import com.taikang.healthcare.sdk.BeanUtil;

 

public class MasterMain implements ApplicationListener<ContextRefreshedEvent> {
@Resource
private BaseCodeMapper baseCodeMapper;
@Resource
RedisDao redisDao;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(event.getApplicationContext().getParent() == null){//root application context 没有parent,他就是老大.

//需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。
//定义一个List用于接收转换后的查询结果
List<Map<String, Object>> baseCodeList = new ArrayList<Map<String, Object>>();
//根据传进来的任意字段进行查询
List<BaseCode> baseCodes = baseCodeMapper.selectByAnyField(null);
//将查询结果遍历
for(BaseCode baseCode :baseCodes){
//将查询结果初始化到redis 
String ObjectId=baseCode.getObjectId().toString();
String Id=baseCode.getId().toString();
String Name=baseCode.getName();
System.out.println(ObjectId);
System.out.println(Id);
System.out.println(Name);
redisDao.hset("basecode_"+ObjectId, Id, Name) ; 
}


}


}

 

2)启动初始化

       在master项目中的applicationContext.xml中增加,启动时调用初始化类加载主数据

<!-- 当Spring容器启动完成后执行下面的这个主数据缓存初始化 -->

<bean class="com.taikang.healthcare.master.service.MasterMain"/>

 

2、如何实现主数据在redis中的增删改查?

     hash数据操作:

  1) 使用步骤:

        (1)把文件RedisDao因为项目的Dao层中

       (2)引入

@Resource  
RedisDao redisDao;

(3)书写方式

       根据获取 redisDao.isopen()为0进入直接在数据库中查询主数据;为1则在缓存中获取主数据信息。

 

System.out.println("======================hash==========================");
//清空数据 
System.out.println(jedis.flushDB()); 

System.out.println("=============增=============");
System.out.println("hashs中添加key001和value001键值对:"+redisDao.hset("hashs", "key001", "test")); 
System.out.println("hashs中添加key002和value002键值对:"+redisDao.hset("hashs", "key002", "value002")); 
System.out.println("hashs中添加key003和value003键值对:"+redisDao.hset("hashs", "key003", "value003"));
System.out.println("新增key004和4的整型键值对:"+redisDao.hincrBy("hashs", "key004", 4l));
System.out.println("hashs中的所有值:"+redisDao.hvals("hashs"));


System.out.println("=============删=============");
System.out.println("hashs中删除key002键值对:"+redisDao.hdel("hashs", "key002"));
System.out.println("hashs中的所有值:"+redisDao.hvals("hashs"));


System.out.println("=============改=============");
System.out.println("key004整型键值的值增加100:"+redisDao.hincrBy("hashs", "key004", 100l));
System.out.println("直接覆盖key001原来的数据:"+redisDao.hset("hashs","key001","test"));
System.out.println("hashs中的所有值:"+redisDao.hvals("hashs"));


System.out.println("=============查=============");
System.out.println("判断key003是否存在:"+redisDao.hexists("hashs", "key003"));
System.out.println("获取key004对应的值:"+redisDao.hget("hashs", "key004"));
System.out.println("批量获取key001和key003对应的值:"+redisDao.hmget("hashs", "key001", "key003")); 
System.out.println("获取hashs中所有的key:"+redisDao.hkeys("hashs"));
System.out.println("获取hashs中所有的value:"+redisDao.hvals("hashs"));
System.out.println("获取hashs中所有的field,value:"+redisDao.hgetAll("hashs"));

 

 

 

   2)使用说明:

   redis开关配置:

//是否开启redis缓存 0关闭1开启
public int isopen() {
//默认为redis关闭
int value = 0;
return value;

}

 

   目前装载可调用的方法为

/**

* @Title : hset 
* @Description: 将哈希表key中的域field的值设为value。如果key不存在,一个新的哈希表被创建并进行hset操作。如果域field已经存在于哈希表中,旧值将被覆盖。 
* @param @param key
* @param @param field
* @param @param value 设定文件 
* @return void 返回类型 
* @throws
*/
public void hset(String key,String field,String value){
ShardedJedis jedis = null;
try {
jedis = shardedJedisPool.getResource();
jedis.hset(key,field, value);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
}
/**

* @Title: hincrBy 
* @Description: 为哈希表key中的域field的值加上增量increment。增量也可以为负数,相当于对给定域进行减法操作。
* @param @param key
* @param @param field
* @param @param value 设定文件 
* @return void 返回类型 
* @throws
*/
public void hincrBy(String key,String field,long value){
ShardedJedis jedis = null;
try {
jedis = shardedJedisPool.getResource();
jedis.hincrBy(key,field, value);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
}
/**

* @Title: hdel 
* @Description: 删除哈希表key中的一个或多个指定域,不存在的域将被忽略。 
* @param @param key
* @param @param fields
* @param @return 设定文件 
* @return boolean 返回类型 
* @throws
*/
public boolean hdel(String key, String... fields) {
log.info("redis--------删除-----------key-----健值对:" + key);
ShardedJedis jedis = null;
try {
jedis = shardedJedisPool.getResource();
jedis.hdel(key, fields);
return true;
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
return false;
}
/**

* @Title: hget 
* @Description: 返回哈希表key中指定的field的值。 
* @param @param key
* @param @param field
* @param @return 设定文件 
* @return String 返回类型 
* @throws
*/
public String hget(String key, String field) {
log.info("redis--------获取-----------key-----健:" + key);
ShardedJedis jedis = null;
String value = "";
try {
jedis = shardedJedisPool.getResource();
value = jedis.hget(key, field);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
log.info("redis--------获取-----------key-----健:" + key);
return value;
}
/**

* @Title: hexists 
* @Description: 查看哈希表key中,给定域field是否存在 
* @param @param key
* @param @param field
* @param @return 设定文件 
* @return boolean 返回类型 
* @throws
*/
public boolean hexists(String key, String field) {
log.info("redis--------判断是否存在:" + key);
ShardedJedis jedis = null;
try {
jedis = shardedJedisPool.getResource();
jedis.hexists(key, field);
return true;
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
return false;
}
/**

* @Title: hmget 
* @Description: 返回哈希表key中,一个或多个给定域的值。
* @param @param key
* @param @param fields
* @param @return 设定文件 
* @return List<String> 返回类型 
* @throws
*/
public List<String> hmget(String key, String... fields) {
log.info("redis--------批量获取-----------key-----健:" + key);
ShardedJedis jedis = null;
List<String> value = new ArrayList<String>();
try {
jedis = shardedJedisPool.getResource();
value = jedis.hmget(key, fields);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
log.info("redis--------批量获取-----------key-----健:" + key);
return value;
}
/**

* @Title: hkeys 
* @Description: 获得哈希表中key对应的所有field。
* @param @param key
* @param @return 设定文件 
* @return Set<String> 返回类型 
* @throws
*/
public Set<String> hkeys(String key) {
log.info("redis--------key-----------所有field:" + key);
ShardedJedis jedis = null;
Set<String> value = new HashSet<String>();
try {
jedis = shardedJedisPool.getResource();
value = jedis.hkeys(key);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
log.info("redis--------key-----------所有field:" + key);
return value;
}
/**

* @Title: hvals 
* @Description: 获得哈希表中key对应的所有values。
* @param @param key
* @param @return 设定文件 
* @return List<String> 返回类型 
* @throws
*/
public List<String> hvals(String key) {
log.info("redis--------获取key中所有的value:" + key);
ShardedJedis jedis = null;
List<String> value = new ArrayList<String>();
try {
jedis = shardedJedisPool.getResource();
value = jedis.hvals(key);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
log.info("redis--------获取key中所有的value:" + key);
return value;
}
/**

* @Title: hgetAll 
* @Description: 返回哈希表key中,所有的域和值。 
* @param @param key
* @param @return 设定文件 
* @return Map<String,String> 返回类型 
* @throws
*/
public Map<String, String> hgetAll(String key) {
log.info("redis--------获取key中所有的value:" + key);
ShardedJedis jedis = null;
Map<String, String> value = new HashMap<String,String>();
try {
jedis = shardedJedisPool.getResource();
value = jedis.hgetAll(key);
} catch (RuntimeException e) {
if (jedis != null) {
shardedJedisPool.returnBrokenResource(jedis);
}
e.printStackTrace();
} finally {
// 正确释放资源
if (jedis != null) {
shardedJedisPool.returnResource(jedis);
}
}
log.info("redis--------获取key中所有的value:" + key);
return value;
}

转载于:https://my.oschina.net/Seaside20151225/blog/667599

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值