Redis学习汇总

Redis是一个非关系型键值对数据库

Redis : 数据库 放数据
Oracle,Mysql : 关系型数据库
Nosql,非关系型数据库,存储结构 key,value,基于内存存储 持久化机制

Redis是什么

Redis(Remote Dictionary Server ),即远程字典服务 !
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis常用命令

127.0.0.1:6379> ping  #查看当前连接是否正常,正常返回PONG
PONG
127.0.0.1:6379> clear  #清楚当前控制台(为了更好的看到下面输入的命令)
127.0.0.1:6379> keys *  #查看当前库里所有的key
1) "db"
127.0.0.1:6379> FLUSHALL  #清空所有库的内容
OK
127.0.0.1:6379> keys * 
(empty array)
127.0.0.1:6379> set name dingdada  #添加一个key为‘name’ value为‘dingdada’的数据
OK
127.0.0.1:6379> get name  #查询key为‘name’的value值
"dingdada"
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set name1 dingdada2
OK
127.0.0.1:6379> get name1
"dingdada2"
127.0.0.1:6379> keys *  #查看当前库里所有的key
1) "name1"
2) "name"
127.0.0.1:6379> EXISTS name  #判断当前key是否存在
(integer) 1
127.0.0.1:6379> move name 1  #移除当前库1的key为‘name‘的数据
(integer) 1
127.0.0.1:6379> keys *
1) "name1"
127.0.0.1:6379> FLUSHALL  #再次清空所有库的内容
OK

## 多加几条数据 下面测试设置key的过期时间
127.0.0.1:6379> set name dingdada
OK
127.0.0.1:6379> set name1 dingdada1
OK
127.0.0.1:6379> set name2 dingdada2
OK
127.0.0.1:6379> EXPIRE name 15  #设置key为’name‘的数据过期时间为15秒 单位seconds
(integer) 1
127.0.0.1:6379> ttl name  #查看当前key为’name‘的剩余生命周期时间
(integer) 13
127.0.0.1:6379> ttl name
(integer) 12
127.0.0.1:6379> ttl name
(integer) 11
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> ttl name  #如若返回-2,证明key已过期
(integer) -2
127.0.0.1:6379> get name    #再次查询即为空
(nil)
127.0.0.1:6379> type name1
string
127.0.0.1:6379> 

Redis支持的五大数据类型

1.String
2.List
3.Set(元素唯一不重复)
4.zSet(有序集合)
5.Hash(哈希)

Redis的优点和缺点

优点

  • 读写性能优异
  • 支持持久化(快照RDB和日志AOF)
  • 数据结构丰富(五种数据结构)
  • 读写分离

缺点

Redis只能使用单线程
受到内存限制
不具备自动容错和恢复功能
Redis比较难在线扩容

为什么要使用Redis

高性能和高并发

高性能:第一次使用数据库,过程缓慢,下一次可以直接从缓存中获取

高并发:直接操作缓存能够承受的请求远远大于直接访问数据库

Redis缓存和java缓存的区别

Redis缓存:分布式缓存,支持多种数据类型
java缓存:本地缓存

Redis为什么快

1.完全基于内存,快速‘
2.数据结构简单
3.采用单线程

持久化机制

1.快照RDB:
这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是redis的默认开启持久化方式,保存的文件是以.rdb形式结尾的文件因此这种方式也称之为RDB方式

只有一个文件dump,rdb

2.AOF只追加日志文件
将Redis执行的每次写命令记录到单独的日志文件中
在redis的默认配置中AOF持久化机制是没有开启的,需要在配置中开启

Redis集群

hash槽,将哈希槽放到每一个节点上,没有使用一致性hash,而是引入哈希槽概念

特点:

  • 不会丢数据
  • 异步复制
  • 默认是0数据库

Redis的缓存穿透

产生原因:

Redis和MySQL中都没有,然后不停的直接请求MySQL。

解决方案:

1.布隆过滤器
2.缓存空对象

Redis的缓存击穿

概念

是指一个非常热点的key,在不停的扛着大并发,当这个key失效时,一瞬间大量的请求冲到持久层的数据库中,就像在一堵墙上某个点凿开了一个洞!

解决方案:

1.放置热点key永不过时
2.加互斥锁(不合理)

Redis的缓存雪崩

原因:

指同一时间大面积失效,数据库短时间收到大量请求而崩掉

解决办法:

缓存不过期(设置key永不失效)
优化缓存过期时间(为key选择合适的过期时间,避免大量ke同时失效y)
加锁排队(对key加锁)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拧螺丝的舒克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值