当前位置:首页 » 文件管理 » 缓存和序列化

缓存和序列化

发布时间: 2025-01-09 15:45:17

❶ 什么叫缓存

所谓的缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。

1、通过文件缓存;顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;

2、内存缓存;也就是创建一个静态内存区域,将数据存储进去,例如我们B/S架构的将数据存储在Application中或者存储在一个静态Map中。

3、本地内存缓存;就是把数据缓存在本机的内存中。

4、分布式缓存机制;可能存在跨进程,跨域访问缓存数据

对于分布式的缓存,此时因为缓存的数据是放在缓存服务器中的,或者说,此时应用程序需要跨进程的去访问分布式缓存服务器。

(1)缓存和序列化扩展阅读

当我们在应用中使用跨进程的缓存机制,例如分布式缓存memcached或者微软的AppFabric,此时数据被缓存在应用程序之外的进程中。

每次,当我们要把一些数据缓存起来的时候,缓存的API就会把数据首先序列化为字节的形式,然后把这些字节发送给缓存服务器去保存。

同理,当我们在应用中要再次使用缓存的数据的时候,缓存服务器就会将缓存的字节发送给应用程序,而缓存的客户端类库接受到这些字节之后就要进行反序列化的操作了,将之转换为我们需要的数据对象。

php缓存技术的PHP缓存类型

1、数据库数据缓存技术:
数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。和memcache技术。
举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
常用的数据库数据缓存技术有:
1.序列化(串行化)缓存
2.JSON缓存
3.XML缓存
4.Array缓存
2、页面缓存:
每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些PHP缓存机制类通常有此功能,例如smarty模板、thinkphp框架)

java中什么是序列化,怎么通俗理解序列化和反序列化

在 Java 中,序列化是指将一个 Java 对象转换为可以存储或传输的格式的过程。这个过程通常用于持久化对象,即将对象的状态保存到文件或数据库中,或在网络上传输对象。序列化的一个关键目的是使对象能够在不同平台、不同版本的 Java 虚拟机之间进行交换或存储,而不会丢失对象的任何状态信息。



反序列化是序列化的逆过程,即将序列化的数据恢复为原始对象。这个过程需要确保序列化的数据格式与反序列化时使用的类结构相匹配,以便正确地重建对象。



在实际开发中,序列化和反序列化通常用于以下场景:




  • 持久化对象:将对象的状态保存到文件或数据库,以便在后续需要时恢复对象。

  • 网络传输:在多台计算机之间传输对象,以实现分布式系统或远程过程调用(RPC)。

  • 内存缓存:将对象序列化到内存中,以便快速访问对象状态。



序列化协议对应于 TCP/IP 四层模型的应用层。在这个模型中,应用层处理用户数据的传输,而表示层负责数据的格式转换,这正是序列化和反序列化所做的事情。



常见的序列化协议包括:




  • JDK自带的序列化:实现 Serializable 接口。虽然简单易用,但效率较低且存在安全漏洞。

  • Hessian:一个轻量级、自定义描述的二进制 RPC 协议。

  • Kryo:高性能的序列化/反序列化工具,支持 Java 语言,并在 Twitter、Groupon 等公司中有广泛应用。

  • Protobuf(Protocol Buffers):由 Google 提供,性能优秀,支持多种语言,跨平台。

  • Protostuff:基于 Protobuf 的实现,提供更简易的用法。



在选择序列化协议时,应考虑以下因素:




  • 性能:序列化和反序列化的速度。

  • 体积:序列化后数据的大小。

  • 易用性:协议的使用复杂度。

  • 跨语言支持:如果需要在不同语言之间传输数据。



综上所述,Kryo 是一种性能优秀且成熟的序列化协议,适用于 Java 环境。Protobuf 和 Protostuff 为跨语言应用提供了便利。Hessian 为轻量级的二进制 RPC 协议,适合用于网络通信。在选择序列化协议时,应根据具体需求和场景选择最合适的一种。

❹ 常用的缓存技术

第一章 常用的缓存技术
1、常见的两种缓存

本地缓存:不需要序列化,速度快,缓存的数量与大小受限于本机内存
分布式缓存:需要序列化,速度相较于本地缓存较慢,但是理论上缓存的数量与大小无限(因为缓存机器可以不断扩展)
2、本地缓存

Google guava cache:当下最好用的本地缓存
Ehcache:spring默认集成的一个缓存,以spring cache的底层缓存实现类形式去操作缓存的话,非常方便,但是欠缺灵活,如果想要灵活使用,还是要单独使用Ehcache
Oscache:最经典简单的页面缓存
3、分布式缓存

memcached:分布式缓存的标配
Redis:新一代的分布式缓存,有替代memcached的趋势
3.1、memcached

经典的一致性hash算法
基于slab的内存模型有效防止内存碎片的产生(但同时也需要估计好启动参数,否则会浪费很多的内存)
集群中机器之间互不通信(相较于Jboss cache等集群中机器之间的相互通信的缓存,速度更快<--因为少了同步更新缓存的开销,且更适合于大型分布式系统中使用)
使用方便(这一点是相较于Redis在构建客户端的时候而言的,尽管redis的使用也不困难)
很专一(专做缓存,这一点也是相较于Redis而言的)
3.2、Redis

可以存储复杂的数据结构(5种)
strings-->即简单的key-value,就是memcached可以存储的唯一的一种形式,接下来的四种是memcached不能直接存储的四种格式(当然理论上可以先将下面的一些数据结构中的东西封装成对象,然后存入memcached,但是不推荐将大对象存入memcached,因为memcached的单一value的最大存储为1M,可能即使采用了压缩算法也不够,即使够,可能存取的效率也不高,而redis的value最大为1G)
hashs-->看做hashTable
lists-->看做LinkedList
sets-->看做hashSet,事实上底层是一个hashTable
sorted sets-->底层是一个skipList
有两种方式可以对缓存数据进行持久化
RDB
AOF
事件调度
发布订阅等
4、集成缓存

专指spring cache,spring cache自己继承了ehcache作为了缓存的实现类,我们也可以使用guava cache、memcached、redis自己来实现spring cache的底层。当然,spring cache可以根据实现类来将缓存存在本地还是存在远程机器上。

5、页面缓存

在使用jsp的时候,我们会将一些复杂的页面使用Oscache进行页面缓存,使用非常简单,就是几个标签的事儿;但是,现在一般的企业,前台都会使用velocity、freemaker这两种模板引擎,本身速度就已经很快了,页面缓存使用的也就很少了。

总结:

在实际生产中,我们通常会使用guava cache做本地缓存+redis做分布式缓存+spring cache就集成缓存(底层使用redis来实现)的形式
guava cache使用在更快的获取缓存数据,同时缓存的数据量并不大的情况
spring cache集成缓存是为了简单便捷的去使用缓存(以注解的方式即可),使用redis做其实现类是为了可以存更多的数据在机器上
redis缓存单独使用是为了弥补spring cache集成缓存的不灵活
就我个人而言,如果需要使用分布式缓存,那么首先redis是必选的,因为在实际开发中,我们会缓存各种各样的数据类型,在使用了redis的同时,memcached就完全可以舍弃了,但是现在还有很多公司在同时使用memcached和redis两种缓存。

热点内容
安卓hostapd源在哪里 发布:2025-01-10 02:31:53 浏览:568
二级c语言证书查询 发布:2025-01-10 02:20:25 浏览:457
大众车的键盘锁密码是多少 发布:2025-01-10 02:20:24 浏览:240
如何将数据库加密码 发布:2025-01-10 02:14:46 浏览:952
阿里云怎么买游戏服务器 发布:2025-01-10 02:01:51 浏览:847
dota和英雄联盟哪个吃配置 发布:2025-01-10 02:00:33 浏览:181
华为云服务器怎么登录 发布:2025-01-10 01:59:48 浏览:127
东南大学知网服务器地址 发布:2025-01-10 01:54:40 浏览:933
安卓手机剪映怎么修改成4k帧率 发布:2025-01-10 01:08:21 浏览:951
微信哪个版本不要求配置 发布:2025-01-10 01:07:31 浏览:405