您的位置:首页 > 数据库 > Redis

Redis 随想

2019-02-14 20:04 106 查看

Redis

  1. Redis 是一个继 memcached 后的一个第三方缓存数据库,它比 memcached 强大很多,支持更多的数据类型(String、list、set、sort set、hash),支持持久化,支持集群;Redis 虽然支持持久化,但是它并不适合持久化的保存数据,因为它不是很稳定,但是由于它是保存内存中,读取的速度非常快,所以在项目中一般都用它作为数据库和应用程序直接的中间层来使用,以减轻数据库的压力,提高运行效率。
  2. 我们项目中很多地方用到了 Redis,比如商品的三级分类、省市县、关于我们、联系我们、友情链接,常见问题等经常查询但是不经常改变数据。Redis 还可以在 tomcat 集群里实现 session 的共享。由于 它是单线程的,所以在电商平台里 也经常用它做“防止超卖”,生成规则的商品编号等,还有就是购物车也用到了 Redis
  3. 代码中,我们一般都通过 spring 整合 redis 官方提供的 jedis 工具包来操作 redis .可以是单机版,也可以是集群。Redis 本身就支持集群操redis_cluster,另外 redis 还支持主从复制,还有它的哨兵模式,在主服务器宕机时,从服务器可以自动转换为主服务器。另外,他也有它的分片机制,就像 mysql 的水平分表设计,数据量大时,可以把数据存储到不同的库中,来减轻 redis 负担。
  4. Redis 的持久化方式主要有2种,RDB 和 AOF,RDB 是一种快照方式,默认每隔5分钟创建一个快照副本,这种方式占用空间大,而且会丢失间隔5分钟之内的数据,但是它适合做备份,恢复时,可以根据需要恢复任意时间点的数据。AOF 是一种日志的持久化记录方式,每秒钟,都把 redis 中新增的数据记录到日志文件中,这种方式只有一个文件,占用空间少,最多丢失1秒内的数据,相对比较好,但是如果想要恢复5分钟或10分钟前某个时间点的数据,就不行了。所以实际项目中,我们一般会两种方式同时使用。如果搭建集群的话,还可以通过集群互相备份数据,只要集群不同时挂掉,单个 redis 就可以从集群中的其它服务器获取到最新数据。
  5. 还有就是,由于 redis 不是很稳定,有时候会发生“穿透”和“雪崩”;redis 都是按照 key 去缓存查询,如果不存在对应的 value, 就应该去数据库查找。如果 key 对应的 value 是一定不存在的,并且对该 key 并发请求量很大,就会对后端系统造成很大的压力,这就叫 缓存穿透。当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如 DB)带来很大压力,这就叫“缓存雪崩”。解决办法是,对查询结果为空的情况也进行缓存,并且给缓存设置不同的有效期。当然 redis 容灾的最有效方法还是塔建集群。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: