2515天 Mr.贰呆

唯一自信的就是自己的人品。
寻求王者玩家一起开黑净化峡谷环境​​

【Java】redis缓存

发布于 / 2606 次围观 / 0 条评论 / Java / brianhan /

*java中操作redis需要引入jedis-2.1.0.jar包

redis是一个高性能的key-value存储系统,能够缓存框架和队列。但是redis是一个内存系统,所以这些数据还需要存到数据库中。


作为缓存框架(与数据库交互): 


create/updae/delete---同时存到redis和数据库 
query--先从redis查,没有记录才从数据库查,并把从数据库查的结果也放一份到redis


作为缓存队列:


1、把对象Object存储到redis中,怎么存?memcache存取对象是序列化和反序列化 
使用通用的序列化、反序列化(频繁的会很消耗cpu,使用Google Protocol Buffer,将对象打成二进制流)或者使用json存储(阿里巴巴的fast-json)



2、java使用redis的客户端一般是:jedis 
jedis的原生接口只支持基本数据类型和String、byte[]


3、我对redis队列的理解: 
重要的数据:先存到数据库,然后存到redis
要求响应速度很高的数据:先写缓存,然后通过消息队列再写入数据库   


如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:

1  Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。


2  Redis支持数据的备份,即master-slave模式的数据备份。


3  Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。


master-slave模式(一般来说用在数据库集群比较多,主要是实现读写分离)


    对于数据库应用而言基本上是读大于写,因此由 Master 服务器负责增、删、改操作,由 Slave 负责读操作(也就是 SELECT),Master 一般只有一台,而 Slave 可以有好多台。Slave 与 Master 之间会有心跳数据包(一般数据库服务器会提供配置)。当 Master 有数据写入时 Master 会将数据同步至各 Slave 上。


如果数据库采用 Master-Slave 的话,那对于应用程序来说是透明的,也就是说,不管用不用 Master-Slave,我们的代码不需要进行修改。



两种缓存方式区别:


1、支持数据类型不同:


    Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能;

    Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。


2、数据一致性:


    Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。

    Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断。

sitemap