66.java项目-activiti实战项目(12)--redis
本文的架构如图
一.缓存与redis
首先本文的讨论局限在服务端分布式缓存的基础之上,前端缓存等暂不在考虑之列.
1.什么是缓存?
首先由于我们服务端的数据大部分情况是保存在数据库中的,而数据库其实是持久化到磁盘中的,这样才能保证数据不会丢失.但是同时安全和高效通常是互斥的,因为安全存储在磁盘中,必然导致cpu读取数据速度慢.安全是保证了,但是不能保证高效特别是一些热点数据的查询使用,比如我们的商城项目中的热点商品的数据,因为热点所以很多人搜索,如果我们依然从数据库中查询数据,则会导致处理熟读特别慢.于是缓存的作用就出来了.
缓存:缓存就是将数据存储在内存中,但是由于存储在内存中,内存中的数据在系统关闭之后会清理掉,所以怎样设计缓存,既要保证高效有要保证不会丢失呢?
2.java缓存技术的对比
redis与memcached以及数据库的对比
Redis和Memcached的其他区别如下:
- 1、Redis和Memcached都是将数据存放在内存中,都是内存数据库。不过Memcached还可用于缓存其他东西,例如图片、视频等等;
- 2、Redis不仅仅支持简单的K/V类型的数据,同时还提供List,Set,Hash等数据结构的存储;
- 3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的Value 交换到磁盘;
- 4、过期策略–Memcached在set时就指定,例如:set key1 0 0 8,即永不过期。Redis可以通过例如expire
设定,例如:expire name 10; - 5、分布式–设定Memcached集群,利用magent做一主多从;Redis可以做一主多从。都可以一主一从;
- 6、存储数据安全–Memcached挂掉后,数据没了;Redis可以定期保存到磁盘(持久化);
- 7、灾难恢复–Memcached挂掉后,数据不可恢复; Redis数据丢失后可以通过AOF恢复;
- 8、Redis支持数据的备份,即Master-Slave模式的数据备份;
- 9、应用场景不一样:Redis出来作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和Session等。
总结:
安全:redis支持灾难恢复,因为redis可以持久化到硬盘,memechache一旦挂掉数据不可恢复.
功能多样性:redis支持多种数据类型存储,memcached支持string.但是memcached可以村吃图片视频等.
命令便捷性:redis操作命令更加多样性,操作更加的方面.
所以总体来说,redis相对memcached更优一些.
redis
一.redis的概述
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。edis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
redis的特点:
1.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
2.单线程操作,所以完全没有并发相关的问题,如并发锁等问题.
3.丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 及bitmap数据类型操作。
4.原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行,内置LUA脚本.
5.丰富的特性 – Redis还支持 publish/subscribe(发布/订阅), 通知, key 过期等等特性,可用作消息队列等使用.
6.安全-支持主从,定时备份持久化等策略.
7.缓存淘汰-多种缓存淘汰策略,助力筛选热点数据,保证内存不会无限扩容.
二.redis的数据类型