1、基本
redis除了做缓存,还能做其他事情,最广泛的应用场景是缓存;Memcache仅用做缓存
2、redis 应用场景能做什么:
a、缓存,提升服务器性能
b、排行榜,SortSet(有序集合)数据结构能够简单的搞定
c、计算器/限速器,利用redis中原子性的自增操作,可以统计类似用户点赞数,用户访问等,若用mysql,频繁的读写会带来大压力;限速器场景:限制某个用户访问某个API频率,如,抢购时,防止用户疯狂点击带来压力。
d、简单消息队列,除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦
e、Session共享,以PHP为例,默认Session是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用Redis保存Session后,无论用户落在那台机器上都能够获取到对应的Session信息
f、一些频繁被访问的数据,经常被访问的数据如果放在关系型数据库,每次查询的开销都会很大,而放在redis中,因为redis 是放在内存中的可以很高效的访问
g、好友列表,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;
3、redis不能作什么:
a、数据量大的,会增加成本,
b、访问频率太低的,保存在内存中浪费资源。
4、区别
1数据库类型:
redis是一个key-value存储系统,是nosql,非关系型数据库,和memcache都是缓存数据库
mysql是关系型数据库
2存储
redis用于存储使用相对频繁的数据到内存,这样减少访问数据库次数,提高效率。
mysql用于存持久化数据到磁盘
3速度
redis读取速度快,
mysql读写速度相对慢
4数据类型
redis数据类型:字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)
mysql数据类型,大致三类:数值,日期,字符
5、使用
一般来说,mysql用于写入和更新,redis用于读取。 这样就说 mysql->redis的同步用的比较多。mysql和redis因为需求的不同,一般都是配合使用。
1redis快,先请求redis,redis找不到再去请求mysql,相当于mysql前面加了一个redis,提高性能,(缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快)
在并发不高的情况下,读操作优先读取redis,不存在的话就去访问MySQL,并把读到的数据写回Redis中;
写操作的话,直接写MySQL,成功后再写入Redis(可以在MySQL端定义CRUD触发器,在触发CRUD操作后写数据到Redis,也可以在Redis端解析binlog,再做相应的操作)
在并发高的情况下,读操作和上面一样;
写操作是异步写,写入Redis后直接返回,然后定期写入MySQL
6、那么为什么不直接全部用redis存储呢?
我的看法是:因为redis存储在内存中,如果存储在内存中,存储容量肯定要比磁盘少很多,那么要存储大量数据,只能花更多的钱去购买内存,造成在一些不需要高性能的地方是相对比较浪费的,所以目前基本都是mysql(主) + redis(辅),在需要性能的地方使用redis,在不需要高性能的地方使用mysql,好钢用在刀刃上
1、mysql支持sql查询,可以实现一些关联的查询以及统计;
2、redis对内存要求比较高,在有限的条件下不能把所有数据都放在redis;
3、mysql偏向于存数据,redis偏向于快速取数据,但redis查询复杂的表关系时不如mysql,所以可以把热门的数据放redis,mysql存基本数据
网友评论