我是靠谱客的博主 落寞自行车,最近开发中收集的这篇文章主要介绍Redis学习汇总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加锁)

最后

以上就是落寞自行车为你收集整理的Redis学习汇总Redis是一个非关系型键值对数据库的全部内容,希望文章能够帮你解决Redis学习汇总Redis是一个非关系型键值对数据库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部