redis学习+安装+面试总结

windows下安装redis

一 redis简介

        redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

redis的官网地址:Redis

        与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

二 redis的基本数据结构类型

Redis主要有以下这五种基本类型:

1 String(字符串)

        常用命令:set,get,decr,incr,mget 等。String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。 常规key-value缓存应用:常规计数、定时器并发控制等。
2 Hash(哈希):

        Hash是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以用 hash 数据结构来存储地址信息等。
3 List(列表):

        数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序list类型:保存多个数据,底层使用双向链表存储结构实现,场景:队列
4 Set(集合):

        数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
        需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序。
        list类型:保存多个数据,底层使用双向链表存储结构实现。
5 zset(有序集合):

  • 新的存储需求:根据排序有利于数据的有效显示,需要提供一种可以根据自身特征进行排序的方式。
  • 需要的存储结构:新的存储模型,可以保存可排序的数据。
  • sorted_set类型:在set的存储结构基础上添加可排序字段。

此外,它还有三种特殊的数据结构类型,如下:

  • Geospatial
  • Hyperloglog
  • Bitmap

三 Redis 缓存穿透、缓存击穿、缓存雪崩

3.1 缓存穿透:

        访问一个不存在的key,每次针对此 key的请求从缓存获取不到,请求转发到数据库,访问量大了可能压垮数据库。比如用一个不存在的用户 id 获取用户信息,redis缓存和数据库中都没有,若黑客利用此漏洞进行攻击可能压垮数据库(黑客访问肯定不存在的数据,造成服务器压力大)

        简单一句话:穿过缓存,直接访问数据库

造成影响:

        1 数据库压力变大

        2 redis命中率变低,从而不断查询数据库

解决方案:

        缓存空值(null)或默认值,使用布隆过滤器请求白名单

3.2 缓存击穿

        当某一key的缓存过期时,大并发量的请求同时访问此key,瞬间击穿缓存服务器直接访问数据库,让数据库处于负载的情况。

        解决方案:

                异步定时更新
                可以对该热点key进行异步定时更新数据,比如某一个热点数据的过期时间是1小时,那么每59分钟,通过定时任务去更新这个热点key,并重新设置其过期时间。
                互斥锁
                简单来说就是当Redis中根据key获得的value值为空时,先锁上,然后从数据库加载,加载完毕,释放锁。若其他线程也在请求该key时,发现获取锁失败,则先阻塞。

3.3 缓存雪崩

        当大量缓存同时过期或缓存服务宕机,所有请求的都直接访问数据库,造成数据库高负载,影响性能,甚至数据库宕机。

解决方案:

  • 可以把不同的key过期时间设置成不同的, 并且通过定时刷新的方式更新过期时间。
  • 构建缓存高可用集群(针对缓存服务故障情况)。
  • 当缓存雪崩发生时,服务熔断、限流、降级等措施保障

常见问题:

1 什么是哨兵模式?

       用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)
其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。

2 哨兵进程有啥作用?

1 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

2 提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

你可能感兴趣的:(redis,学习,数据库)