Java项目使用Redis缓存数据

一、Redis的下载安装

1、下载gcc编译器

yum install gcc-c++


安装完成后检查是否安装成功,查看版本

gcc --version


2、使用weget下载redis

wget http://download.redis.io/releases/redis-6.2.4.tar.gz


下载成功后使用 ll 或 ls 命令查看当前目录下有redis压缩包


使用命令解压缩

tar -zxvf redis-6.2.4.tar.gz

解压成功后当前目录下有redis解压后的文件

3、进入解压后的redis文件,使用make进行编译

编译后默认安装目录就是redis文件夹所在目录
4、在解压后目录下执行make install 命令安装redis

5、进入安装目录启动redis服务

redis-server redis.conf


6、在xshell复制一个会话,cd进入redis安装目录,进行客户端连接

redis-cli -h 127.0.0.1 -p 6379


避雷:我本来想在Redisdesktopmanager里面连接我虚拟机里装的redis,然后一直报错

在网上搜解决方案采用修改redis.conf后成功
具体步骤如下
(1)如果已经启动redis,ctrl+c退出关闭redis,vim redis.conf修改配置文件,把原来的bind的IP改成虚拟机IP,protectedmode改成no,保存并退出

(2)重新启动redis

redis-server redis.conf

再次打开Redisdesktopmanager测试连接成功

这种情况下,虚拟机内客户端连接目录中IP记得改成redis.conf里改成的bindIP

redis-cli -h 127.0.0.1 -p 6379


另外,目前redis启动必须在一个会话终端里,启动redis之后就不能切换目录,退出等操作了,如果切换目录或退出就会关闭redis服务,如果要允许在启动redis的会话终端还能做别的操作还需要在redis.conf配置文件中更改配置daemonize yes;即作为守护进程启动,这样redis就可以后台启运行了。

这时候我们再来重新启动redis就不会显示像第五点的图一样的redis服务器启动后的画面,可以做别的操作

二、Java项目中整合Redis

1、添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>


2、redis连接配置
Redis实例默认创建了16个数据库,且不支持自定义命名,以dbX的方式命名(db0~db15);
此处我使用的redis的14数据库,没设置密码,若设置了密码则相应在password处输入密码

spring:redis:host: 127.0.0.1port: 6379database: 14password:


3、代码实现
(1)基础缓存DAO

@Repository
public class BaseCacheOperate {private final GsonBuilder gsonBuilder = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss");/*** @description boundList-Add*/public void add(BoundListOperations<String, String> boundListOperations, Object obj) {try {boundListOperations.rightPush(gsonBuilder.create().toJson(obj));} catch (Exception e) {e.printStackTrace();}}/*** @description boundList-Delete*/public void remove(BoundListOperations<String, String> boundListOperations, String cacheStr) {try {boundListOperations.remove(1, cacheStr);} catch (Exception e) {e.printStackTrace();}}/*** @description boundList-Query*/public List<String> list(BoundListOperations<String, String> boundListOperations, long count) {List<String> result = null;try {result = boundListOperations.range(0, count - 1);} catch (Exception e) {e.printStackTrace();}return result;}/*** @description boundHash-Add*/public void put(BoundHashOperations<String, String, String> boundHashOperations,String key, Object value) {try {boundHashOperations.put(key, gsonBuilder.create().toJson(value));} catch (Exception e) {e.printStackTrace();}}/*** @description boundHash-Remove*/public void remove(BoundHashOperations<String, String, String> boundHashOperations,String key) {try {boundHashOperations.delete(key);} catch (Exception e) {e.printStackTrace();}}/*** @description boundHash-Entries(Value单实体)*/public <T> Map<String, T> entries(BoundHashOperations<String, String, String> cacheOperations, Class<T> valueClass) {Map<String, T> result = new HashMap<>();Map<String, String> entries = cacheOperations.entries();if (DataStructureUtils.isValid(entries)) {entries.forEach((key, value) -> result.put(key, gsonBuilder.create().fromJson(value, valueClass)));}return result;}/*** @description boundHash-Get(Value单实体)*/public <T> T get(BoundHashOperations<String, String, String> cacheOperations,String key, Class<T> valueClass) {String cacheStr = get(cacheOperations, key);return StringUtils.isNotBlank(cacheStr) ? gsonBuilder.create().fromJson(cacheStr, valueClass) : null;}/*** @description boundHash-Get(Value为List)*/public <T> List<T> getList(BoundHashOperations<String, String, String> cacheOperations,String key, Class<T> valueClass) {String cacheStr = get(cacheOperations, key);return StringUtils.isNotBlank(cacheStr) ? gsonBuilder.create().fromJson(cacheStr, new TypeToken<List<T>>() {}.getType()) : null;}/*** @description boundHash-Get*/public String get(BoundHashOperations<String, String, String> cacheOperations,String key) {String result = null;try {result = cacheOperations.get(key);} catch (Exception e) {e.printStackTrace();}return result;}/*** @param cacheOperations Hash缓存操作实例* @param keyList         Key值集* @param valueClass      Value的类* @return 缓存数据集* @description 根据Key值集获取多条Value*/public <T> List<T> multiGet(BoundHashOperations<String, String, String> cacheOperations,List<String> keyList, Class<T> valueClass) {List<String> cacheStrList = multiGet(cacheOperations, keyList);List<T> result = new ArrayList<>();if (DataStructureUtils.isValid(cacheStrList)) {for (String cacheStr : cacheStrList) {result.add(gsonBuilder.create().fromJson(cacheStr, valueClass));}}return result;}/*** @param cacheOperations Hash缓存操作实例* @param keyList         Key值集* @param typeToken       Gson转换类型* @return 缓存数据集* @description 根据Key值集获取多条Value*/public <T> List<T> multiGet(BoundHashOperations<String, String, String> cacheOperations,List<String> keyList, TypeToken<List<T>> typeToken) {List<String> cacheStrList = multiGet(cacheOperations, keyList);List<T> result = new ArrayList<>();if (DataStructureUtils.isValid(cacheStrList)) {for (String cacheStr : cacheStrList) {result.addAll(gsonBuilder.create().fromJson(cacheStr, typeToken.getType()));}}return result;}/*** @param cacheOperations Hash缓存操作实例* @param keyList         Key值集* @return 缓存数据集* @description 根据Key值集获取多条Value*/public List<String> multiGet(BoundHashOperations<String, String, String> cacheOperations, List<String> keyList) {List<String> result = null;if (DataStructureUtils.isValid(keyList)) {try {result = cacheOperations.multiGet(keyList);if (result != null) {result.removeIf(Objects::isNull);}} catch (Exception e) {e.printStackTrace();}}return result;}}

(2)实际缓存业务

@Repository
public class TestDataDAO {private final BaseCacheOperate baseCacheOperate;private final BoundHashOperations<String, String, String> operations;@Autowiredpublic TestDataDAO(PublicCacheOperate baseCacheOperate, StringRedisTemplate redisTemplate) {this.baseCacheOperate = baseCacheOperate;this.operations = redisTemplate.boundHashOps("TEST_DATA");}/*** @description 缓存测试数据*/public void cache(TestData testData) {baseCacheOperate.put(operations, testData.getId().toString(), airSiteLatestData);}/*** @description 根据ID获取测试数据*/public TestData get(Long id) {return baseCacheOperate.get(operations, id.toString(), TestData.class);}/*** @description 根据ID集获取测试数据集*/public List<TestData> list(List<Long> idList) {return baseCacheOperate.multiGet(operations, idList.stream().map(Objects::toString).collect(Collectors.toList()), TestData.class);}
}

Java项目使用Redis缓存数据相关推荐

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据

    基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据 转载于:https://github.com/Meowv/Blog 在日志记录中使用的静态方法有人指出写法不 ...

  2. java雪崩_【并发编程】java 如何解决redis缓存穿透、缓存雪崩(高性能示例代码)...

    [并发编程]java 如何解决redis缓存穿透.缓存雪崩(高性能示例代码) 发布时间:2018-11-22 16:48, 浏览次数:872 , 标签: java redis <>缓存穿透 ...

  3. 05-使用Redis缓存数据,管理员相关数据表

    文章目录 使用Redis缓存数据 管理员相关数据表 使用Redis缓存数据 使用Redis可以提高查询效率,一定程度上可以减轻数据库服务器的压力,从而保护了数据库. 通常,应用Redis的场景有: 高 ...

  4. java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...

    一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...

  5. 积分签到mysql_简易积分签到功能java代码实现实现Redis缓存数据

    -------需求说明 ---- 需求分析 积分签到处于app页面"我的",用户会频繁的来回切换,如果将数据全部存储到数据库中然后去数据库中做查询,所以这里我才用的Redis缓存的 ...

  6. 缓存详解-在java项目中使用缓存

    目录 一.概述 二.java常用的缓存 三.使用缓存将会面临的一些问题 穿透 雪崩 击穿 总结 三.缓存淘汰策略 缓存淘汰 在Spring项目中优雅的实现缓存 二级缓存推荐的实现 一.概述 在java ...

  7. redis 缓存数据_Redis 缓存数据方案对比:常规 VS 高并发服务器

    1 Redis 是什么 Redis 是一种开源的非关系型数据库.起源于负载较大时,当前关系型数据库无法承载的情况. 到目前为止,Redis 可以用作数据库.缓存.消息处理.Redis 可以存储键和5种 ...

  8. 十行代码将Redis缓存数据进行分页提取与展示

    预览 准备数据 从以前的项目中提取一些数据直接导入MySQL,原先数据库为sqlite3,先将数据转为xls文件格式. 然后使用MySQL可视化工具Navicat for MySQL新建一个数据库,新 ...

  9. spring boot使用redis缓存数据与自动清除

    在spring boot项目中使用缓存很方便,有如下两种使用场景: 直接操作RedisTemplate缓存数据 在方法上加@Cacheable注解来缓存数据 方法1适用于缓存session.token ...

最新文章

  1. 物联网白皮书【2018】重磅发布|今年的物联网产业交出了一张怎样的答卷
  2. 微信小游戏开发教程-游戏实现1
  3. hashcode相等的两个对象一定相等吗_为什么重写 equals方法时一定要重写hashCode方法?...
  4. php项目自动布署mysql_如何自动化一键部署PHP项目
  5. 汇编语言--单步中断
  6. eclipse中文乱码解决_已解决-解决IntelliJ IDEA控制台输出中文乱码问题
  7. eclipse 快捷键大全
  8. shell的logo含义_Shell(壳牌石油)标志历史
  9. 不再单打独斗?中国移动联合多企业组建医疗数据公司
  10. 8s nfs 挂载文件_Kubernetes集群使用网络存储NFS
  11. 10安装报错0x8007000d_windows10:MySQL8.0.22版本安装教程
  12. 什么是 jsp,什么是Servlet?jsp 和Servlet 有什么区别?
  13. matlab与螺旋桨,基于Matlab的船用螺旋桨计算机实时仿真及GUI设计
  14. javaWeb——servlet的认识及Tomcat动态部署
  15. mysql比较两个表数据的差异_mysql实用技巧之比较两个表是否有不同数据的方法分析...
  16. excel中使用vlookup函数筛选时遇到#N/A 错误
  17. 怎样把计算机里的W0rd放到电脑桌面,当电脑桌面没有WORD文档时怎么打开WORD文档...
  18. 计算机中计算平均数的函数是什么,Excel里怎么求平均数的?函数是什么?!excle2010怎么求平均数...
  19. LDO稳压芯片-内部框图及选型参数
  20. python bs期权模型_使用python第二部分建立股票期权评估模型

热门文章

  1. SpringSecurity+Vue:实现添加登录图片验证码
  2. vs 调出控制台窗口
  3. socket服务端同时监听多个端口号
  4. 2. SQL语句学习
  5. 2020 A survey on HAR Based on Temporal Signals of Portable Inertial Sensors
  6. Symantec Endpoint Protection 14.3.558
  7. 【C语言】计算机二级C语言程序设计
  8. http协议及http协议和tcp协议的区别
  9. ssm-学子商城-项目第二天
  10. 【数学之美】第三版推荐序二 摘录