概述
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是一个非关系型键值对数据库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复