redis是什么
nosql非关系型数据库,数据是放在缓存中的,所以查询快
优势: 快速查询
劣势: 存储的数据缺少结构化
关系型数据库在sql 上 做文章, 多表联查, 一条SQL 查出来多张表中的数据,这就是关系型数据库的特点
redis 的性能远大于 mysql 的,但是为了提升性能,它的一些其他方式 不如mysql
redis查询 和 增删改 特别快 秒 一核2G 1M带宽的 服务器上,10万/s读, 2万/s写 插入没问题
mysql 2核4G的服务器上,也就500 --800个连接
redis: 电商网站的 商品详情页, 在设计大流量的系统架构中,redis 基本上是必用的,通常来做 缓存技术
redis 也可以做消息队列,也可以用来做分布式锁,redis 还可以用来做秒杀
五种数据结构
1.string
1. 存储: set key value
2. 获取: get key
2.hash
1. 存储: hset key field value
2. 获取: * hget key field: 获取指定的field对应的值
* hgetall key:获取所有的field和value
3. 删除:hdel key field
3.list
1. 添加:
1. lpush key value: 将元素加入列表左表
2. rpush key value:将元素加入列表右边
2. 获取: * lrange key start end :范围获取
3. 删除: * lpop key: 删除列表最左边的元素,并将元素返回
* rpop key: 删除列表最右边的元素,并将元素返回
4.set (不允许重复元素)
1. 存储: sadd key value
2. 获取: *smembers key:获取set集合中所有元素
3. 删除: 3. 删除:srem key value:删除set集合中的某个元素 (del key 删除所有)
5.sortedset(排行榜)
1. 存储:zadd key score value
2. 获取:zrange key start end [withscores]
3. 删除:zrem key value
redis的应用场景
• 缓存(数据查询、短连接、新闻内容、商品内容等等)
• 聊天室的在线好友列表
• 任务队列。(秒杀、抢购、12306等等)
• 应用排行榜
• 网站访问统计
• 数据过期处理(可以精确到毫秒
• 分布式集群架构中的session分离
持久化机制
redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
RDB
默认方式,不需要进行配置,默认就使用这种机制
- 在一定的间隔时间中,检测key的变化情况,然后持久化数据,缺点是容易丢失最后一次保存的数据
AOF
日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据(不推荐 影响性能)(企业两者都使用)
redis问题
缓存穿透
缓存穿透是指查询一个数据库一定不存在的数据。恶意访问数据库,造成数据库压力甚至可能压垮数据库
解决:
如果从数据库查询的对象为空,也放入缓存,key为用户提交过来的主键值,value为null,只是设定的
缓存过期时间较短,比如设置为60秒。这样下次用户再根据这个key查询redis缓存就可以查询到值了
(当然值为null),从而保护我们的数据库免遭攻击。
缓存雪崩
缓存雪崩,是指在某一个时间段,缓存集中过期失效。在缓存集中失效的这个时间段对数据的访问查
询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。
为了避免缓存雪崩的发生,我们可以将缓存的数据设置不同的失效时间,这样就可以避免缓存数据在某
个时间段集中失效。例如对于热门的数据(访问频率高的数据)可以缓存的时间长一些,对于冷门的数
据可以缓存的时间段一些。甚至对于一些特别热门的数据可以设置永不过期。
缓存击穿
缓存击穿,是指一个key非常热点(例如双十一期间进行抢购的商品数据),在不停的扛着大并发,大
并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求到数据
库上,就像在一个屏障上凿开了一个洞。
我们同样可以将这些热点数据设置永不过期就可以解决缓存击穿的问题了。
redis集群
主从复制Replication
读写分离
要实现主从复制这种模式非常简单,主节点不用做任何修改,直接启动服务即可。从节点需要修改redis.conf配置文件,加入配置:slaveof <主节点ip地址> <主节点端口号>,例如master的ip地址为192.168.200.129,端口号为6379,那么slave只需要在redis.conf文件中配置slaveof 192.168.200.129 6379即可。