redis缓存Hash操作的在主数据中的应用
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操作的在主数据中的应用相关推荐
- redis的hash操作在集中式session中的应用
在集群部署时,为了高可用性的目的,往往把session进行共享,共享分为两种:session复制和集中式管理. redis在session集中式管理中可以起到比较大的作用. 制约session集中式共 ...
- Redis缓存 ava-Jedis操作Redis,基本操作以及 实现对象保存
源代码下载: http://download.csdn.net/detail/jiangtao_st/7623113 1.Maven配置 [html] view plaincopyprint? < ...
- Redis基础--Hash操作常用命令
目录 HGET HSET HSETNX HLEN HINCRBY HINCRBYFLOAT HMGET HMSET HKEYS HVALS HGETALL HEXISTS HDEL HSCAN HGE ...
- Redis的Hash操作
Hash 哈希 操作命令 Hset--向哈希表添加元素 Hget--获取哈希表中元素 Hgetall--获取哈希表中所有元素 Hdel--删除哈希表中元素 Hlen--获取哈希表中元素个数 Hexis ...
- Redis 缓存和 MySQL 数据如何实现一致性?
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
- Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
- 高并发用redis还是mysql_高并发架构系列:Redis缓存和MySQL数据一致性方案详解
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
- 高并发架构系列:Redis缓存和MySQL数据一致性方案详解
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
- redis缓存雪崩、缓存击穿和缓存穿透还傻傻分不清?看这篇就够了
前言 关于Redis的高频问题,缓存雪崩.缓存击穿和缓存穿透一定少不了,相信大家在面试中都被问到过类似的问题.为什么这些问题一直热门呢?因为我们在使用Redis缓存时,这些问题都是很容易遇到的.接下来 ...
- Redis 缓存和 MySQL 如何实现数据一致性
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
最新文章
- dataset__getitem___PyTorch源码解析与实践(1):数据加载Dataset,Sampler与DataLoader
- 我的世界之史蒂夫生存记
- linux常用命令大全(转)
- VS2015下OpenGL库的配置
- c rsa java私钥_RSA,JAVA私钥加密,C#公钥解密
- iOS消息推送整体流程
- [Java基础]抽象类基础
- postman提取返回值
- Java可靠性测试fit_Java ParagraphVectors.fit方法代码示例
- python摄像头跟随人脸_opencv-python 学习笔记2:实现目光跟随(又叫人脸跟随)
- 在Silverlight中进行图片下载
- 团队项目(MVP-----------新能源汽车无线充电管理系统)个人任务(5)
- Labview子VI的创建与调用
- python简单实现排列和组合的计算
- 利用朴素贝叶斯算法解决“公园凉鞋问题”
- (半翻译)篡改mac应用后,如何resign签名,重新获得mac系统的信任?
- 云上PDF怎么删除页眉页脚_Word文档如何删除页眉页脚横线?如何取消文档页眉横线?...
- 斜线/、反斜线\、双斜线//、双反斜线\\ ,区别
- 将顺序表中非零元素移动到顺序表的前面
- java秒转换为年月日_java时间转化为年月日以及将秒转化为天小时分秒字符串显示总结...
热门文章
- linux系统的电脑要不要买,是否有必要为Linux购买一台相对较高配置的电脑?
- python unittest接口测试_Python+unittest 接口自动化测试
- cas 单点登录_CAS 单点登录简介
- php引用()详解及注意事项
- CC***原理及防范方法
- ubuntu phpmyadmin 404 not found
- UGUI是如何频繁访问Image/Text等组件的raycastTarget的(读源码有感)
- cosmic中文翻译_cosmic是什么意思,cosmic翻译成中文,英译中-xyz翻译网
- thinkphp 一个文件怎么调用另一个文件中的define()_ThinkPHP 简易开发思路 amp;amp; MVC和URL跳转...
- Nodejs ---- 升级到指定版本