Redis
一.前言
-
Redis是什么?
redis是一种基于键值对(key-value)的NoSQL数据库。Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失”。Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。 - Redis能做什么
在谈为什么需要redis之前,先要清楚redis可以做什么。
缓存。通过引入缓存加快数据的访问速度,降低后端数据源的压力。
排行榜。redis提供给列表和有序几何数据结构可以很方便的构建各种排行榜系统。
计数器。redis原生支持高性能的计数功能,可以为视频播放量、网页浏览数等提供支持。
消息队列。redis提供发布订阅功能。
为了解决session存放的问题,也有多种解决方案
方案一:存放在cookie里面。不安全,否定
方案二:存放在文件或者数据库当中。速度慢
方案三:session复制。大量session冗余,节点浪费大
方案四:使用NoSQL缓存数据库。例如redis或者memcache等,完美解决
二.Redis基本介绍
(一)Redis的特性
高效性:Redis读取的速度是110000次/S,写的速度是81000次/S。
原子性:对每一条数据操作要么成功,要么失败。
支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)。
稳定性:redis支持各种架构,主从复制,哨兵模式,redis集群。
其他特性:支持过期时间,支持事务,消息订阅。
(二)redis的适用场景
获取最新的N个数据
获取最新榜单的topN
需要精确设置过期时间的应用 可对数据设置过期的时间,多长时间之后,数据就会自动删除掉
计数器的应用:利用INCR,DECR命令来构建计数器系统,数据来一次就累加一次
数据去重(Uniq操作):可以对数据进行去重操作
实时系统:Pub/Sub系统可以构建实时的消息系统
构建消息队列:你发送一个消息,我来接受这个消息即可
构建队列系统:通过redis来构建先进先出的数据的队列
数据缓存:将一些比较频繁使用的热数据 缓存到内存里面去
三.Redis数据类型与命名
(一)Redis中的数据类型
string 字符串,类似于Java的字符串,同时支持数值类型的操作。
list 列表类似于 ArrayList 。
hash 类似于HashMap 类似于hash散列表,对应key,value对的数据类型。
set 类似于hashSet 对数据进行去重,不会对数据进行排序操作。
zset 类似于 linkedHashSet 对数据进行排序操作。
四.Redis 操作命令
启动并进入Redis客户端:
#启动Redis cd /export/servers/redis-3.2.8 src/redis-server redis.conf #连接并进入Redis客户端 cd /export/servers/redis-3.2.8 src/redis-cli -h node01
Redis的对Key和对几种数据类型的操作请参阅以下网址:
https://www.runoob.com/redis/redis-intro.html
1.Redis缓存击穿
缓存击穿,是指用户请求的Key的数据不在Redis的缓存当中,最终只能去后端的数据库中查找请求的数据。当这种请求特别多是会对后端数据库造成很大的压力。产生的原因可能是我们设置的Key不合理,没有将所有的热点Key缓存到Redis当中来。我们可以使用Redis计数器,每次查询数据的Key都可以通过计数器来记录,判断哪些数据是热点Key数据,保存到Redis里面去。
2.Redis缓存雪崩
缓存雪崩就是我们的缓存是在同一时间创建(如天猫双十一),然后设置的缓存时间是一置的, 这样到特定的时间就会出现缓存雪崩的情况, 此时若是有当访问量的操作就会造成数据库服务器的压力过大。
Redis 集群的优势:
1.Redis可以使用所有机器的内存,变相扩展性能;
2.缓存永不宕机:启动集群,永远让集群的一部分起作用。主节点失效了子节点能迅速改变角色成为主节点,整个集群的部分节点发生故障或无法通信的情况下能够继续处理命令;
3.使Redis的计算能力通过简单地增加服务器得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长;
4.Redis集群没有中心节点,不会因为某个节点成为整个集群的性能瓶颈;异步处理数据,实现快速读写。
5.异步处理数据,实现快速读写。