详解Java在redis中进行对象的缓存
Java在redis中进行对象的缓存一般有两种方法,这里介绍序列化的方法,个人感觉比较方便,不需要转来转去。
一、首先,在存储的对象上实现序列化的接口
package com.cy.example.entity.system; import java.util.List; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; import com.cy.example.entity.SuperEntity; @TableName("users") public class SysUserEntity extends SuperEntity<SysUserEntity> { /** * 序列化 */ private static final long serialVersionUID = -2967710007706812401L; private String c_username; private String c_pwd; private String c_phone; private String c_email; private String n_age; private String n_sex; private String n_status; private SysDepartmentEntity n_departmentId; @TableField(exist = false) private List<SysRoleEntity> roleList;// 一个用户具有多个角色 private SysUserEntity n_superior; //省略getter、setter }
二、进行存储的编写
// 存储对象 public void setObject(String key, Object obj) { Jedis jedis = null; try { jedis = pool.getResource(); jedis.set(key.getBytes(), SerializeUtil.serialize(obj)); } catch (Exception e) { logger.info("缓存服务器连接异常!"); e.printStackTrace(); } finally { // 返还到连接池 jedis.close(); } }
三、获取存储的对象
// 获取对象 public Object getObject(String key) { byte[] obj = null; Jedis jedis = null; try { jedis = pool.getResource(); obj = jedis.get(key.getBytes()); } catch (Exception e) { logger.info("缓存服务器连接异常!"); e.printStackTrace(); } finally { // 返还到连接池 jedis.close(); } return SerializeUtil.unserialize(obj); }
可以看到,redis中存储的是序列化之后的对象
以上所述是小编给大家介绍的Java在redis中进行对象的缓存详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
相关推荐
-
java中对Redis的缓存进行操作的示例代码
Redis 是一个NoSQL数据库,也是一个高性能的key-value数据库.一般我们在做Java项目的时候,通常会了加快查询效率,减少和数据库的连接次数,我们都会在代码中加入缓存功能.Redis的高效缓存功能给我们解决了难题.下面我主要讲讲在Java项目中怎么去连接Redis服务器以及需要注意的事项. 1.导入必须的Jar包 使用Java操作Redis需要两个必须的Jar包:jedis-2.5.1.jar 和 commons-pool2-2.0.jar .每个版本可以不一样,根据你自己下载的
-
javaWeb中使用Redis缓存实例解析
直接进入主题: 一:serviceImpl定义: @Service public class JedisClientSingleService implements JedisClient { @Autowired private JedisPool jedisPool; @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String string = jedis.get(key);
-
在Java中使用redisTemplate操作缓存的方法示例
背景 在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条.但同时对查询速度的要求也比较高. 这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一个简单的查询,速度可能在几分钟.当然几分钟也并不完全是跑SQL的时间,这里面包含发请求,查询数据并且返回数据的时间的总和.但是即使这样,这样的速度明显不能满足交互式的查询需求. 我们的下一个解决方案就是Presto,在使用了Presto之后,查询速度降到了秒级.但是对于一个前端查询界面的交互式查询来
-
详解在Java程序中运用Redis缓存对象的方法
这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种: 1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据时再反序列化回来,转换成对象. 2. 利用 Json与java对象之间可以相互转换的方式进行存值和取值. 正面针对这两种方法,特意写了一个工具类,来实现数据的存取功能. 1. 首页在Spring框架中配置 JedisPool 连接池对象,此对象可以创建 Redis的连接 Jedis对象.当然,必须导
-
Java自定义注解实现Redis自动缓存的方法
在实际开发中,可能经常会有这样的需要:从MySQL中查询一条数据(比如用户信息),此时需要将用户信息保存至Redis. 刚开始我们可能会在查询的业务逻辑之后再写一段Redis相关操作的代码,时间长了后发现这部分代码实际上仅仅做了Redis的写入动作,跟业务逻辑没有实质的联系,那么有没有什么方法能让我们省略这些重复劳动呢? 首先想到用AOP,在查询到某些数据这一切入点(Pointcut)完成我们的切面相关处理(也就是写入Redis).那么,如何知道什么地方需要进行缓存呢,也就是什么地方需要用到AO
-
详解JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
NoSQL(Not Only SQL),泛指非关系型数据库,是为了处理高并发读写.海量数据的高效率存储和访问.高扩展性和高可用性而产生的. 分类 相关产品 典型应用 数据模型 优点 缺点 键值对(Key-Value)存储 Redis.Voldemort.Berkeley DB 内容缓存.处理高访问负载 一系列键值对 快速查询 存储的数据缺少结构化 列存储数据库 Cassandra.HBase.Riak 分布式文件系统 以列簇式存储,将同一列数据存在一起 查询速度快,可扩展性强,更容易进行分布式扩
-
如何在 Java 中实现一个 redis 缓存服务
缓存服务的意义 为什么要使用缓存?说到底是为了提高系统的运行速度.将用户频繁访问的内容存放在离用户最近,访问速度最快的地方,提高用户的响应速度.一个 web 应用的简单结构如下图. web 应用典型架构 在这个结构中,用户的请求通过用户层来到业务层,业务层在从数据层获取数据,返回给用户层.在用户量小,数据量不太大的情况下,这个系统运行得很顺畅.但是随着用户量越来越大,数据库中的数据越来越多,系统的用户响应速度就越来越慢.系统的瓶颈一般都在数据库访问上.这个时候可能会将上面的架构改成下面的来缓解数
-
Java客户端利用Jedis操作redis缓存示例代码
前言 Redis是一个开源的Key-Value数据缓存,和Memcached类似.Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型). Jedis 是 Redis 官方首选的 Java 客户端开发包.下面就来给大家详细关于Java客户端利用Jedis操作redis缓存的相关内容,话不多说,直接来看示例代码吧. 示例代码: //连接redis ,redis的默认端口是6379 Jedis
-
【Redis缓存机制】详解Java连接Redis_Jedis_事务
Jedis事务 我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中,也需要使用openSession()来获取session事务对象,来进行sql执行.查询等操作.当我们对数据库的操作结束的时候,是事务对象负责关闭数据库连接. 事务对象用于管理.执行各种数据库操作的动作.它能够开启和关闭数据库连接,执行sql语句,回滚错误的操作. 我们的Redis也有事务管理对象,其位于redis.clients.jedis.Transaction下. Jedis事
-
详解Java在redis中进行对象的缓存
Java在redis中进行对象的缓存一般有两种方法,这里介绍序列化的方法,个人感觉比较方便,不需要转来转去. 一.首先,在存储的对象上实现序列化的接口 package com.cy.example.entity.system; import java.util.List; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; im
-
详解Java删除Map中元素java.util.ConcurrentModificationException”异常解决
今天在使用map并需要根据某些条件删除map元素时,自然而然想到调用Map中的remove(Object key)函数进行删除,代码如下: //遍历map,如果key<5,那么就删除此元素. Map<Integer, Integer> users = new LinkedHashMap<Integer, Integer>(); for (Map.Entry<Integer,Integer> entry : users.entrySet()){ for (int i
-
详解Java关于JDK中时间日期的API
目录 JDK 8中关于日期和时间的API测试 JDK 8 之前日期和时间的API测试 //1.System类中的currentTimeMillis() public void test1(){ long time = System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为时间为单位的时间差. //称为时间戳 System.out.println(time);//1628416744054 } /* java.util.Date类 |-
-
一文详解Java如何创建和销毁对象
目录 一.介绍 二.实例构造(Instance Construction) 2.1 隐式(implicitly)构造器 2.2 无参构造器(Constructors without Arguments) 2.3 有参构造器(Constructors with Arguments) 2.4 初始化块(Initialization Blocks) 2.5 构造保障(Construction guarantee) 2.6 可见性(Visibility) 2.7 垃圾回收(Garbage collect
-
详解java面试题中的i++和++i
代码如下所示: public class TestPlusPlus{ public static void main(String[] args){ int k = addAfterReturn(10); System.out.println(k); //输出 10 int k1 = addbeforeReturn(10); System.out.println(k1); //输出11 } public static int addbeforeReturn(int i){ return ++i;
-
详解java操作Redis数据库的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)
该工具包含是封装了jedis,包含redis.properties和jedisPool,序列化使用的是protostuff,map类型操作使用的是fastjson 自己抽空写的,基本只要理解什么是get,什么是set就可以使用redis数据库了 下载地址:点击打开链接 JedisPoolUtil的源码: package com.bsy.common; import java.io.FileInputStream; import java.io.FileNotFoundException; imp
-
详解Java多线程编程中的线程同步方法
1.多线程的同步: 1.1.同步机制: 在多线程中,可能有多个线程试图访问一个有限的资源,必须预防这种情况的发生.所以引入了同步机制:在线程使用一个资源时为其加锁,这样其他的线程便不能访问那个资源了,直到解锁后才可以访问. 1.2.共享成员变量的例子: 成员变量与局部变量: 成员变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作,这多个线程是共享一个成员变量的. 局部变量: 如果一个变量是局部变量,那么多个线程对同一个对象进行操作,每个线程都会有一个该局部变量的拷贝.他们
-
详解Java并发包中线程池ThreadPoolExecutor
一.线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要开销的.而线程池中的线程是可复用的,不需要每次执行异步任务的时候重新创建和销毁线程:②线程池提供一种资源限制和管理的手段,比如可以限制线程的个数,动态的新增线程等等. 在下面的分析中,我们可以看到,线程池使用一个Integer的原子类型变量来记录线程池状态和线程池中的线程数量,通过线程池状态来控制任
-
详解Java的JDBC中Statement与PreparedStatement对象
一旦获得一个连接,我们可以与数据库进行交互.在JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送SQL或PL/SQL命令和从数据库接收数据. 它们还定义方法,帮助Java和数据库使用SQL数据类型之间转换数据的差异. 下表提供了每个接口的用途概要,了解决定使用哪个接口 Statement 对象: 创建Statement对象 在可以使用Statement对象执行SQL语句,需要使用Connection对象的c
-
详解Java设计模式编程中的Flyweight享元模式的开发结构
享元(Flyweight)模式:通过共享技术以便有效的支持大量细粒度的对象. 享元模式在阎宏的<java与模式>中分为单纯享元模式和复合享元模式,复合模式的复合享元是不可以共享的,享元对象能做到共享的关键是区分内蕴态(Internal State)和外蕴态( External State).这两个"蕴态"翻译的太难懂,我不是说翻译的不好,可能是我理解能力差,还是<Design Pattern Elements of Reusable Object-Oriented S
随机推荐
- 10分钟学会写Jquery插件实例教程
- NET USER 命令详解(dos下添加用户)
- 移动Web中图片自适应的两种JavaScript解决方法
- JS实现可点击展开与关闭的左侧广告代码
- ASP.NET自定义Web服务器控件之Button控件
- Python 绘图和可视化详细介绍
- ashx中使用session的方法(获取session值)
- HTML5 拖拽复制功能的实现
- php 邮件发送问题解决
- 基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
- 一个简单的linux命令 touch
- Nginx缓存Cache的配置方案以及相关内存占用问题解决
- JQurey入门——事件机制之事件中的冒泡现象示例解释
- js实现对table的增加行和删除行的操作方法
- 浅谈C++中对象的复制与对象之间的相互赋值
- Android利用爬虫实现模拟登录的实现实例
- ASP.NET Core使用SkiaSharp实现验证码的示例代码
- vue2.0 子组件改变props值,并向父组件传值的方法
- C# TSC打印二维码和条形码的实现方法
- 浅谈Vue.js 中的 v-on 事件指令的使用