2019独角兽企业重金招聘Python工程师标准>>>

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

redis缓存Hash操作的在主数据中的应用相关推荐

  1. redis的hash操作在集中式session中的应用

    在集群部署时,为了高可用性的目的,往往把session进行共享,共享分为两种:session复制和集中式管理. redis在session集中式管理中可以起到比较大的作用. 制约session集中式共 ...

  2. Redis缓存 ava-Jedis操作Redis,基本操作以及 实现对象保存

    源代码下载: http://download.csdn.net/detail/jiangtao_st/7623113 1.Maven配置 [html] view plaincopyprint? < ...

  3. Redis基础--Hash操作常用命令

    目录 HGET HSET HSETNX HLEN HINCRBY HINCRBYFLOAT HMGET HMSET HKEYS HVALS HGETALL HEXISTS HDEL HSCAN HGE ...

  4. Redis的Hash操作

    Hash 哈希 操作命令 Hset--向哈希表添加元素 Hget--获取哈希表中元素 Hgetall--获取哈希表中所有元素 Hdel--删除哈希表中元素 Hlen--获取哈希表中元素个数 Hexis ...

  5. Redis 缓存和 MySQL 数据如何实现一致性?

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  6. Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  7. 高并发用redis还是mysql_高并发架构系列:Redis缓存和MySQL数据一致性方案详解

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  8. 高并发架构系列:Redis缓存和MySQL数据一致性方案详解

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  9. redis缓存雪崩、缓存击穿和缓存穿透还傻傻分不清?看这篇就够了

    前言 关于Redis的高频问题,缓存雪崩.缓存击穿和缓存穿透一定少不了,相信大家在面试中都被问到过类似的问题.为什么这些问题一直热门呢?因为我们在使用Redis缓存时,这些问题都是很容易遇到的.接下来 ...

  10. Redis 缓存和 MySQL 如何实现数据一致性

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

最新文章

  1. dataset__getitem___PyTorch源码解析与实践(1):数据加载Dataset,Sampler与DataLoader
  2. 我的世界之史蒂夫生存记
  3. linux常用命令大全(转)
  4. VS2015下OpenGL库的配置
  5. c rsa java私钥_RSA,JAVA私钥加密,C#公钥解密
  6. iOS消息推送整体流程
  7. [Java基础]抽象类基础
  8. postman提取返回值
  9. Java可靠性测试fit_Java ParagraphVectors.fit方法代码示例
  10. python摄像头跟随人脸_opencv-python 学习笔记2:实现目光跟随(又叫人脸跟随)
  11. 在Silverlight中进行图片下载
  12. 团队项目(MVP-----------新能源汽车无线充电管理系统)个人任务(5)
  13. Labview子VI的创建与调用
  14. python简单实现排列和组合的计算
  15. 利用朴素贝叶斯算法解决“公园凉鞋问题”
  16. (半翻译)篡改mac应用后,如何resign签名,重新获得mac系统的信任?
  17. 云上PDF怎么删除页眉页脚_Word文档如何删除页眉页脚横线?如何取消文档页眉横线?...
  18. 斜线/、反斜线\、双斜线//、双反斜线\\ ,区别
  19. 将顺序表中非零元素移动到顺序表的前面
  20. java秒转换为年月日_java时间转化为年月日以及将秒转化为天小时分秒字符串显示总结...

热门文章

  1. linux系统的电脑要不要买,是否有必要为Linux购买一台相对较高配置的电脑?
  2. python unittest接口测试_Python+unittest 接口自动化测试
  3. cas 单点登录_CAS 单点登录简介
  4. php引用()详解及注意事项
  5. CC***原理及防范方法
  6. ubuntu phpmyadmin 404 not found
  7. UGUI是如何频繁访问Image/Text等组件的raycastTarget的(读源码有感)
  8. cosmic中文翻译_cosmic是什么意思,cosmic翻译成中文,英译中-xyz翻译网
  9. thinkphp 一个文件怎么调用另一个文件中的define()_ThinkPHP 简易开发思路 amp;amp; MVC和URL跳转...
  10. Nodejs ---- 升级到指定版本