背景~~
随着互联网+和大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量,这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力 ,来解决系统性能上的瓶颈。
什么是Redis~~
Redis是一个开源的,高性能的,C语言开发,键值对(key-value)存储数据的NoSql数据库
NoSql: Not Only Sql 泛指非关系型数据库 Redis / MongoDB/Hbase
关系型数据库 : Oracle Mysql SqlServer
数据库应用的发展历史
1: 在互联网大数据时代来临前,企业的一些内部信息管理系统,一个单个数据库实例就可以应付系统的需求
单数据库实例
2: 随着系统访问量用户的增多,数据量的增大 ,单个数据库实例已经满足不了系统读取数据的需求
缓存(ehCache/MemCached)+数据库实例
3: 缓存可以缓解数据库的读取压力,但是数据量的写入压力持续增大,可以采取数据库主从进行读写分离
缓存+主从数据库+读写分离
4: 数据量再次增大 ,读写分离以后 ,主数据库的写库压力出现瓶颈
缓存 +主从数据库集群+读写分离 +分库分表
5 :互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性大,实时性高而且格式不固定的数据
NoSql数据库 +主从数据库集群+读写分离 +分库分表
Redis有什么用~~
Redis的主要作用: 快速存取
以电商平台为例,Redis在系统架构中的一个位置
Redis的应用场景:
单点登陆/直播平台里面在线好友列表/抢购 秒杀/商品的排行榜/点赞/数据过期
Redis怎么用~~
官网地址:https://redis.io/
最新版本 : 3.2.9
应用版本: 3.0.4
Redis的五大数据类型以及应用场景
List
k-v格式中 v的数据类型是List,其实类似java里面的LinkedList
把这个有序列表看成一根竹子,可以从两头插入数据
从左边插入记录 lpush commet:1 1 2 3
从右边插入记录 rpush comment:1 4 5 6
3 2 1 4 5 6
从左边弹出记录 lpop comment:1 1
从右边弹出记录 rpop comment:1 1
获取分页: lrange comment:1 start end
1.lrem key 删N个value
rpush list03 1 1 1 2 2 2 3 3 3 4 4 4 5 6 7
lrem list03 2 3 代表删掉2个3
lrange list03 0 -1
应用场景: 商品的评论表
String
k-v格式中 v的数据类型是String,一个redis中字符串value最多可以是512M
设值 set key value /mset k1 v1 mset k2 v2
incr k2 递增加1
decr k2 递减减1
incrby k2 3 k2加3
取值 get key
删值 del key
实际应用场景: 秒杀商品/点赞
Hash
k-v格式中 v的数据类型是hash,其实就是java里面的Map
设值: hset mobile_huawei id 1 批量:hmset mobile_huawei id 1 name huaweip9 price 2999
取值: hget mobile_huawei id 批量:hgetall mobile_huawei
删值: del key
hexists customer id 如果存在返回1 不存在返回0
hkeys/hvals
实际应用场景:电商网站中的商品详细信息
set
k-v格式中 v的数据类型是set 和list不同的是:list是有序的 ,set就是无序的,且具有唯一性
sadd set01 1 1 2 2 3 3 会去掉重复添加
增 sadd friends:juran tds jungle aurocal yulouchun
删 srem friends:keven tds
查看 smember friends:juran
两个集合的交集 sinter friends:juran friends:tds
随机出栈 spop juran
应用场景: 微信朋友查看权限 /独立IP投票限制
Zset(sorted set)
k-v格式中 v的数据类型是zset 有序的set
增加 zadd mobile:sales 100 huawei 99 iphone 98 vivo 97 oppo
删除 zrem mobile:sales oppo
ZRANGEBYSCORE mobile:sales 98 (100 不包含100
从小到大获取商品 :zrange mobile:sales 0 10 从小到大
withscores 带上分数
从大到小获取商品 : zrevrange mobile:sales 0 10
ZRANGEBYSCORE mobile:sales 97 100 limit 2 2 从第二条开始截取两条
应用场景: 商品的销售排行榜
Redis~~
Redis对事务的支持目前还比较简单,redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令
set age 33
multi 打开事务
set age 10
set age 20
exec 让命令按顺序执行
get age
discard 取消事务 其实就是清空事务的命令队列并退出事务上下文,也就是我们常说的事务回滚。
redis只支持简单的事务,mysql事务如果执行不成功会进行回滚。
multi
incr age
incr name
exec
Redis的持久化~~
简单说,数据从内存同步到硬盘
两种持久化方式
RDB方式
默认支持,在指定的时间间隔内,将内存中的数据集快照写入到磁盘
save 900 1 900秒内如果超过1个key被修改,则发起快照
save 300 10
save 60 10000
AOF方式
日志的形式记录服务器处理的每一个操作,服务器启动之初,读取文件,重新构建数据库
3.无持久化 通过配置继用Redis持久化功能,Redis缓存机制
4.同时使用RDB和AOF
领取专属 10元无门槛券
私享最新 技术干货