Redis缓存数据库知识
1.什么是redis
简单理解:
redis是一个缓存数据库,也是一种中间件,是为了解决主数据库压力从而采用的一种软件解决方案。里面往往存放一些不是太重要(不需要永久存放),但是又必须临时存放的东西,比如token(登录信息),签到记录,活动领取记录等等
Redis是一个开源的内存数据结构存储系统,也可以用作数据库、缓存和消息中间件。
以下是一个使用Redis作为缓存的简单示例:
假设你有一个Web应用程序,它需要频繁地查询数据库以获取数据。为了提高性能,你可以使用Redis作为缓存,将经常使用的数据存储在Redis中。这样,当Web应用程序需要数据时,它可以首先检查Redis缓存中是否存在数据,如果存在则直接从Redis中获取数据,否则再从数据库中获取数据并将其存储到Redis缓存中。
在这个示例中,Redis充当了一个高速缓存,可以显著提高Web应用程序的性能。由于Redis存储在内存中,所以它非常快速,可以处理高并发的请求。
2.redis的数据结构
它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合等,并提供了丰富的操作这些数据结构的命令。
3.redis跟mysql的区别?
Redis和MySQL是两种不同的数据存储系统,它们的设计目标和应用场景也不同,因此每秒处理能力也有所不同。
Redis是一款基于内存的数据存储系统,它的每秒处理能力非常高,可以达到数十万甚至数百万次的读写操作。这是因为Redis将数据存储在内存中,而内存的读写速度非常快,可以达到几十GB/s的速度。此外,Redis还采用了多线程、异步I/O、事件驱动等技术,进一步提高了性能。
MySQL是一款基于磁盘的关系型数据库系统,它的每秒处理能力相对较低,一般在几千到几万次的读写操作之间。这是因为MySQL需要将数据存储在磁盘上,而磁盘的读写速度相对较慢,一般只有几百MB/s的速度。此外,MySQL还需要进行SQL解析、查询优化、索引查找等复杂的操作,这也会影响性能。
需要注意的是,每秒处理能力并不是唯一的性能指标,不同的应用场景和需求可能需要不同的性能指标。此外,Redis和MySQL也可以结合使用,根据实际情况选择合适的存储方案。
redis是可以优化手段,可有可无。
不过大型的公司里面,基本都会部署redis
3.安装redis
以下是在CentOS 7.5上安装Redis的步骤:
3.1.下载最新的redis
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
3.2.安装redis
yum --enablerepo=remi install redis
//中间记得输入y
3.3.启动redis
启动redis(必须要做)
systemctl start redis
检查是否启动(看看就行了)
ps -A|grep redis
查看安装时创建的文件(看看就行了)
rpm -ql redis
查看redis版本(看看就行了)
redis-cli --version
检查Redis是否已经启动(看看就行了)
systemctl status redis
设置开机自启(必须要做)
systemctl enable redis.service
本地连接redis(看看就行了)
redis-cli
//没有空格
3.4. 配置redis
如果你需要配置,可以去修改这个文件
Redis的默认配置文件位于/etc/redis.conf。你可以修改这个文件以满足你的需求,比如修改Redis的监听IP地址、端口号等。
vim /etc/redis.conf
例如:
这里我们要修改redis配置,允许别的地方可以连接到redis里面
在默认情况下,Redis只允许本地访问,如果需要允许远程访问,需要修改Redis配置文件。
以下是修改Redis配置文件以允许任何人链接的步骤:
-
打开Redis配置文件/etc/redis.conf,可以使用以下命令打开:
vim /etc/redis.conf
-
找到bind参数的配置行,将其注释掉然后设置一行为0.0.0.0,例如:
#bind 127.0.0.1 -::1 bind 0.0.0.0
- 如果需要进行密码认证,找到requirepass参数的配置行,将其注释掉或设置为指定的密码,例如:
#requirepass foobared
requirepass haimianbaobao
如果该行被注释掉,需要将其前面的#号去掉,并在后面替换为你想要设置的密码。
我这里设置的是 haimianbaobao
wq!保存修改并退出编辑器。
3.5 额外补充:
在vim里面如何快速定位到某一行:
在命令模式下,按下斜杠键(/),然后输入关键词,按下 Enter 键,即可搜索到包含该关键词的第一个匹配行。
可以重复按下 n 键,跳转到下一个匹配行。
例如要搜索包含“requirepass”的行,可以按下斜杠键,然后输入“requirepass”,按下 Enter 键。
3.6 重启redis
重启Redis服务器使得修改生效,可以使用以下命令重启Redis:
systemctl restart redis
修改完成后,Redis将允许任何人链接到服务器。
需要注意的是,为了确保安全性,建议在远程链接时使用密码认证,并限制只有授权的用户才能够链接到Redis服务器。
4.连接redis数据库
4.1 服务器本地连接redis
在CentOS 7.5系统上连接Redis数据库,你需要按照以下步骤进行:
- 连接redis:
redis-cli
2.连接成功后,输入刚才的密码进行认证
auth haimianbaobao
//haimianbaobao是我刚才自己设置的密码
3.认证通过后,就可以使用redis命令
// 查询所有的数据
keys *
// 添加一个字符串类型的键值对:
set mykey "Hello, Redis!"
// 添加一个list类型的键值对:
lpush mylist "item1" "item2" "item3"
4.2 使用工具远程连接redis
参考另一个教程
5.redis的常用命令都有哪些?
在实际的工作中,redis通常不会使用命令来操作,而是像使用navicat一样,使用工具来操作redis,这样效率会高的多。
但是常见的命令大家也需要了解一些。
以下是Redis的一些常用命令:
- 键操作命令:
SET key value
:设置一个键值对。GET key
:获取一个键的值。DEL key
:删除一个键。EXISTS key
:检查一个键是否存在。KEYS pattern
:查找匹配给定模式的所有键。
- 哈希表操作命令:
HSET key field value
:设置哈希表中的一个字段的值。HGET key field
:获取哈希表中一个字段的值。HGETALL key
:获取哈希表的所有字段和值。HDEL key field1 field2 ...
:删除哈希表中的一个或多个字段。HEXISTS key field
:检查哈希表中是否存在指定字段。
- 列表操作命令:
LPUSH key value1 value2 ...
:将一个或多个值插入到列表头部。RPUSH key value1 value2 ...
:将一个或多个值插入到列表尾部。LPOP key
:从列表头部弹出一个值。RPOP key
:从列表尾部弹出一个值。LLEN key
:获取列表的长度。
- 集合操作命令:
SADD key member1 member2 ...
:向集合中添加一个或多个成员。SMEMBERS key
:获取集合中的所有成员。SREM key member1 member2 ...
:从集合中删除一个或多个成员。SISMEMBER key member
:检查一个成员是否存在于集合中。
- 有序集合操作命令:
ZADD key score1 member1 score2 member2 ...
:向有序集合中添加一个或多个成员,每个成员都有一个分数。ZRANGE key start stop [WITHSCORES]
:获取有序集合中排名在指定范围内的成员。ZREM key member1 member2 ...
:从有序集合中删除一个或多个成员。ZSCORE key member
:获取有序集合中指定成员的分数。
- 其他命令:
PING
:检查Redis服务器是否可用。INFO
:获取Redis服务器的信息。SELECT index
:选择指定的数据库。FLUSHDB
:清空当前数据库的所有键。FLUSHALL
:清空所有数据库的所有键。
这些是Redis的一些常用命令,你可以根据你的需要使用这些命令。
6.redis的穿透、击穿、雪崩
Redis缓存穿透、击穿、雪崩是Redis缓存中的三个常见问题,分别是:
- 缓存穿透:指查询一个不存在的key,由于缓存中没有对应的数据,因此会将请求打到后端的数据库上,导致数据库压力过大,甚至宕机。
- 缓存击穿:指查询一个存在的key,但是由于某些原因,该key在某个时间点失效,此时大量请求同时访问该key,导致请求直接打到后端的数据库上,导致数据库压力过大,甚至宕机。
- 缓存雪崩:指缓存中大量的key在同一时间失效或者更新,导致大量请求直接打到后端的数据库上,从而导致数据库负载瞬间升高,甚至宕机,导致整个系统出现故障的情况。
为了避免Redis缓存穿透、击穿、雪崩问题,可以采取以下措施:
- 缓存穿透:可以在应用程序中对查询参数进行校验,例如使用布隆过滤器、在应用层使用缓存穿透保护策略等。
- 缓存击穿:可以在缓存中设置热点数据永不过期,或者使用互斥锁/分布式锁等手段避免大量请求同时访问失效的key。
- 缓存雪崩:可以在设置缓存过期时间时,加上随机值,避免缓存同时失效,或者使用缓存预热策略,提前将数据加载到缓存中,避免在同一时间大量数据失效。
通过以上措施,可以有效地避免Redis缓存中的三个常见问题,提高系统的可用性和稳定性。