一、为什么使用redis,redis是一种缓存机制,一般我们的存储有几种,
硬盘存储
为什么使用硬盘存储,因为硬盘存储可是保证数据持持久化。
缓存存储
缓存存储可以保证数据在内存中高效的被调用。所以我们一般在缓存中存储一些高点击,高热点的数据
其实tomcat中有自带的缓存,叫EC-cache,因为他是定义在启动容器中,所以其中的大小是有限制的,而且只能在单一的情况下使用。所以我们不怎么使用
现在比较常用的两个缓存服务:
memcache:memcache查询效率高,能容许并发量大。但是它的缺点就是存储比较单一,memcache只能存储String类型的数据
redis:现在使用的比较多。为什么使用redis呢,因为redis查询效率高,能容许并发量大,最关关键的就是,redis支持下列类型数据存储:
Stirng 使用方法就是set key value的形式存储。查询就是使用get key的形式完成。这里还要提一下的就是我们常常使用缓存完成一些并发操作。例如有两个用户同时对一件东西抢购。这回造成并发问题。我们可以使用redis,把我们的问题简化成,我们在抢购的时候我们其中一个用户setnx 一个数据进入redis,当同时我们B用户也需要的时候也setnx一个进入缓存 发现存在了就等着A用户抢购完成执行。才能setnx,这个时候时间已经过期了,所以我们就完成了一次并发处理。
expire是用来处理key失效的时间的。
hashMap:存储的方式和使用hmset key value key value的形式完成。获取就是hgetall 单个改变就是hset key value的形式。
list 使用的是l(r)push list key value value... 相当于我们最基础的堆操作。我们要查询的时候使用lrange key 范围来查询。
set这个是用来去冲的我们是不能存储相同的数据在一个set里面。查询两组set中相同的数据,setinner
不相同的是setdiff
介绍完了,剩下的就是我们需要讲一下,
java中使用jedis来实现。
然后剩下的就是订阅的思想:
订阅的思想,举个例子:
现在打仗了,司令给1营频道发了一个message,从左侧突袭。所有一营soldiers接受到频道1的消息,然后就去做这件事情,
换做现在来说呢,就像滴滴打车,同一个范围内的很多司机,他们都在等着接单,现在一名乘客开始要求乘车,发送了一个消息,在这个范围内的频道的司机们接受到了,就开始枪弹。这就是消息订阅的原理。一般消息订阅是不妨在业务逻辑上进行处理,单独放在另外一套系统里进行处理,类似的还有接受短信和消息。
我们通过redis进行讲解,首先我们需要开启redis的客户端,然后我们需要使用subscribe 频道 来监听我们还这个频道发过来的消息,然后我们发送一条消息的时候他们监听到了,就是这个原理。
现在我们不使用redis的订阅机制,因为比较鸡肋,我们一般使用的是AcitveMq来专门处理这类似消息处理机制的问题。使用publish 频道来推送我们的消息。
消息队列是个很重要的东西,我们需要知道怎么使用ActiveMQ