详解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 缓存服务
缓存服务的意义 为什么要使用缓存?说到底是为了提高系统的运行速度.将用户频繁访问的内容存放在离用户最近,访问速度最快的地方,提高用户的响应速度.一个 web 应用的简单结构如下图. web 应用典型架构 在这个结构中,用户的请求通过用户层来到业务层,业务层在从数据层获取数据,返回给用户层.在用户量小,数据量不太大的情况下,这个系统运行得很顺畅.但是随着用户量越来越大,数据库中的数据越来越多,系统的用户响应速度就越来越慢.系统的瓶颈一般都在数据库访问上.这个时候可能会将上面的架构改成下面的来缓解数
-
在Java中使用redisTemplate操作缓存的方法示例
背景 在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条.但同时对查询速度的要求也比较高. 这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一个简单的查询,速度可能在几分钟.当然几分钟也并不完全是跑SQL的时间,这里面包含发请求,查询数据并且返回数据的时间的总和.但是即使这样,这样的速度明显不能满足交互式的查询需求. 我们的下一个解决方案就是Presto,在使用了Presto之后,查询速度降到了秒级.但是对于一个前端查询界面的交互式查询来
-
【Redis缓存机制】详解Java连接Redis_Jedis_事务
Jedis事务 我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中,也需要使用openSession()来获取session事务对象,来进行sql执行.查询等操作.当我们对数据库的操作结束的时候,是事务对象负责关闭数据库连接. 事务对象用于管理.执行各种数据库操作的动作.它能够开启和关闭数据库连接,执行sql语句,回滚错误的操作. 我们的Redis也有事务管理对象,其位于redis.clients.jedis.Transaction下. Jedis事
-
详解JavaEE 使用 Redis 数据库进行内容缓存和高访问负载
NoSQL(Not Only SQL),泛指非关系型数据库,是为了处理高并发读写.海量数据的高效率存储和访问.高扩展性和高可用性而产生的. 分类 相关产品 典型应用 数据模型 优点 缺点 键值对(Key-Value)存储 Redis.Voldemort.Berkeley DB 内容缓存.处理高访问负载 一系列键值对 快速查询 存储的数据缺少结构化 列存储数据库 Cassandra.HBase.Riak 分布式文件系统 以列簇式存储,将同一列数据存在一起 查询速度快,可扩展性强,更容易进行分布式扩
-
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 .每个版本可以不一样,根据你自己下载的
-
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
-
Java自定义注解实现Redis自动缓存的方法
在实际开发中,可能经常会有这样的需要:从MySQL中查询一条数据(比如用户信息),此时需要将用户信息保存至Redis. 刚开始我们可能会在查询的业务逻辑之后再写一段Redis相关操作的代码,时间长了后发现这部分代码实际上仅仅做了Redis的写入动作,跟业务逻辑没有实质的联系,那么有没有什么方法能让我们省略这些重复劳动呢? 首先想到用AOP,在查询到某些数据这一切入点(Pointcut)完成我们的切面相关处理(也就是写入Redis).那么,如何知道什么地方需要进行缓存呢,也就是什么地方需要用到AO
-
详解在Java程序中运用Redis缓存对象的方法
这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种: 1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据时再反序列化回来,转换成对象. 2. 利用 Json与java对象之间可以相互转换的方式进行存值和取值. 正面针对这两种方法,特意写了一个工具类,来实现数据的存取功能. 1. 首页在Spring框架中配置 JedisPool 连接池对象,此对象可以创建 Redis的连接 Jedis对象.当然,必须导
-
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在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
随机推荐
- struts2实现多文件上传的示例代码
- 实例讲解iOS应用开发中使用UITableView创建自定义表格
- oracle 安装与SQLPLUS简单用法
- C#中HTML字符转换函数分享
- js实现同一个页面多个渐变效果的方法
- PHP 日志缩略名的创建函数代码
- 在Python中用has_key()方法查找键是否存在的教程
- C语言switch 语句的用法详解
- Windows中MySQL root用户忘记密码解决方案
- Python安装第三方库的3种方法
- JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
- jQuery zclip插件实现跨浏览器复制功能
- jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
- JavaScript操作cookie类实例
- javascript实现playfair和hill密码算法
- Android中使用七牛云存储进行图片上传下载的实例代码
- Java语法基础之for语句练习
- Java连接并操作Sedna XML数据库的方法
- php array_intersect比array_diff快(附详细的使用说明)
- php object转数组示例