定义:Redis是一个基于内存的,以Key-Value形式存储数据的高性能Nosql数据库,可以用来存储远程服务信息用作注册中心
memcached与redis的区别?
1、两者存储方式不同,memcached是存在内存中的,如果一旦断电会挂掉;而redis虽然也会存在内存中,但磁盘中也存有数据,保证数据持久性
2、支持的类型也不一样,memcached对数据类型支持非常简单,而redis可以支持String,list,hash,set
3、底层实现的不一样,一般都是去调用系统函数,而redis有自己的VM,速度会更快
redis的数据淘汰策略
- volatile-lru:从已经设置过期时间的数据集中,挑选最近最少使用的数据淘汰.
- volatile-ttl:从已经设置过期时间的数据集中,挑选即将要过期的数据淘汰。
- volatile-random:从已经设置过期时间的数据集中,随机挑选数据淘汰。
- allkeys-lru:从所有的数据集中,挑选最近最少使用的数据淘汰。
- allkeys-random:从所有的数据集中,随机挑选数据淘汰。
- no-enviction:禁止淘汰数据。
redis为什么把所有数据都放到内存中?
为了使读写速度都达到最快,将所有的数据都存储在内存中,让后通过异步的方式将数据写入到磁盘中。而且如果不存在内存中,磁盘的IO读写速度会影响redis性能
redis的并发竞争问题如何解决?
第一种是在客户端,对连接进行池化,同时对客户端读写redis操作采用内部所synchronized
第二种是在服务器,利用setnx实现锁
第三种可以解除消息队列,比如RabbitMQ进行消息的排队,对所有的消息进行串行,一条一条执行
简要说明redis的过期键删除策略
redis有三种删除策略其中包括定时删除、惰性删除、定期删除。
定时删除表示给redis设定一个time的时间,当定时器的键过期时间到了时立即对值进行删除(属于主动删除)
惰性删除就是我也不设定过期时间,也不手动删除,而是当下次获取时先对这个键是否过期进行判定,如果过期就进行删除(属于被动删除)
定期删除就是每个固定的时间对redis中的数据进行过期键的检查,对过期的键进行删除(也是属于主动删除)
redis如何对普通的db进行数据的同步?
在我之前用过的有两种方式:
第一种是当请求来了之后,先去redis中查看有没有缓存,如果redis有需要的数据就直接将数据取出然后返回;如果没有缓存就去数据库中拿新的数据,在返回的时候把从数据库中查到的数据放到redis中。这种方式适用于数据量大的情况,并且不经常做更新
第二种也是当请求来了之后,先去Redis中查看有没有这个key,如果有的话就对redis中的数据进行更新,同时把redis中更新的key记录下来;如果没有相对应的key就去数据库中拿新的数据,在返回的时候把从数据库中查到的数据放到redis中。二者最大的区别就是第二种是对redis进行更新操作,然后后台会有相关的机制将更新redis时的key分别读出来,然后找到对应的db进行对数据库的更新。这种方式适用于数据量大且经常更新的,但最大的缺点就是要进行备份,因为担心redis挂掉
本人经验不多,经历的就这些吧,若有遗漏后期补充