Redis

Redis介绍:

  1. Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样,以下是5种基本类型:
类型样式
Stringhello world
Hash{name:“Jack”,age:21}
List[A->B->C->C]
Set{A,B,C}
SortedSet{A:1,B:2,C:3}
  1. Redis操做不同数据类型的命令分组链接:

    https://redis.io/commands
    
  2. Redis通用命令

     通用指令是部分数据类型的,都可以使用的指令,常见的有:
    
     KEYS:查看符合模板所有的key,不建议在生产设备上使用
    
     DEL:删除一个指定的key
    
     EXISTS:判断key是否存在
    
     EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
    
     TTL:查看一个key的甚于有效期
    
     通过help[command]可以查看一个命令具体的用法。
    

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式为:

            项目名:业务名:类型:id;
  1. String类型:最基本的数据类型,是二进制安全的,任何形式的字符串都可以存储,包括二进制数据,序列化后的数据,JSON化的对象

  2. Hash类型:是一个String类型的域(field)和值(value)得映射表,用来存储对象信息。Reids中,每个哈希表可以存储2^32-1个键值对,也就是40多亿个数据。

  3. List类型:Redis中的List类型与java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索也可以支持反向检索。特征与LinkedList类似:

     有序
     元素可以重复
     插入和删除快
     查询速度一般
    

    6.1. 如何利用List结构模拟一个栈?

     入口和出口在同一边
    

    6.2. 如何利用List结构模拟一个队列?

     入口和出口在不同边
    

    6.3 . 如何利用List结构模拟一个阻塞队列?

     入口和出口在不同边
    
     出队时采用BLPOP或BRPOP
    
  4. Set类型:Redis的Set结构与java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

     无序
     元素不可重复
     查找快
     支持交集、并集、差集等功能
    
  5. SortedSet:Redis的SortedSet是一个可排序的set集合,与java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表加hash表。

     可排序
     元素不重复
     查询速度快
     因为SortedSet的可排序特性,经常被用来实现排行版这样的功能。
    

Redis优势

1. 内存数据库,属于非关系型数据库,在大数据量高并发请求的时候,为了减少与
服务器mysql数据库的大量交互,导致的效率低,因为redis的QPS(每秒查询的请求
次数)达到10w/s, 处理性能很高;
2. 有丰富的数据类型redis本身是key-value 形式存储数据,提供了五种基本类型
的存储
3. 业务场景:因为redis的性能与丰富的数据类型适用于处理 热数据缓存,点赞,
排名,秒杀等业务 (注意 如果你不会秒杀,就不要说)

Redis为什么这么快

1. 纯内存操作,避免了磁盘 `I/O` 等耗时操作**
2. 单线程操作,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程
上下文切换的消耗。
3. 采用非阻塞的IO多路复用机制,提升了并发效率

Redis雪崩

1.概念

雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在
Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据
库压力造成查询堵塞甚至宕机。

2.解决方案

数据的过期时间采用随机数,均匀分布
数据的过期时间设置为永不过期
搭建redis集群,实现高可用

缓存穿透

1.概念

指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到
数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,
造成缓存穿透。

2.解决方案

  将不存在于缓存、数据库的数据,设置为null , 保存到redis 缓存中,并且设
  置过期时间

缓存击穿

1.概念

   缓存击穿:某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况
,当这个 key 在【失效的瞬间】,大量的请求就击穿了缓存,直接请求数据库
,就像是在一道屏障上凿开了一个洞。

2.解决方案

1.将热点数据设置为永远不过期
2.使用互斥锁(mutex key)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值