涉及开源项目(dailyfresh-B2C)的部署架构如下:
1)Redis是什么?
Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存,除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。
-
它是一种高级的key:value存储系统,其中value支持五种数据类型:
- 字符串(strings)
- 散列(hashes)(哈希是从redis-2.0.0版本之后才有的数据结构)
- 列表(lists)
- 集合(sets)
- 有序集合(sorted sets)
-
redis提供了两种磁盘持久化(persistence)的方式:
- RDB(Redis DataBase),即在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
- AOF(Append Only File),即将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
- RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。
- 也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。
- Redis和memcache相比:
- redis可以用来做存储(storge)、而memcache是来做缓存(cache)。
- 存储的数据有“结构”,对于memcache来说,存储的数据,只有一种类型——“字符串”,而redis则可以存储字符串、链表、集合、有序集合、哈序结构。
-
Redis的事务处理:
- 事务:一个完整的动作,要么全部执行,要么什么也没有做。
- 四个构成redis事务处理基础的指令:
- MULTI用来组装一个事务
- EXEC用来执行一个事务
- DISCARD用来取消一个事务
- WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行
-
Redis的主从同步:
- 像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。
- 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。
- redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低redis的处理性能。
缓存数据的处理流程
为什么要用缓存?
使用缓存主要是为了提升用户体验以及应对更多的用户。
1、高性能
假如用户第一次访问数据库中的某些数据的话,这个过程是比较慢,毕竟是从硬盘中读取的。
但是,如果用户访问的数据属于高频数据并且不会经常改变的话,那么就可以放心将该用户访问的数据存在缓存中。这样用户下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。
不过,要保持数据库和缓存中的数据的一致性。
2、高并发
一般像 MySQL 这类的数据库的 QPS大概都在 1w 左右(4 核 8g) ,但是使用 Redis 缓存之后很容易达到 10w+,甚至最高能达到 30w+(就单机 redis 的情况,redis 集群的话会更高)。
- QPS(Query Per Second):服务器每秒可以执行的查询次数。
直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而也就提高的系统整体的并发。
2)Redis的安装和配置
2.1 安装Redis
2.1.1 下载Redis
进入官网:https://redis.io/download
按照官网的Installation进行操作:
he@he-ThinkPad-X200:~$ wget https://download.redis.io/releases/redis-6.2.2.tar.gz # 下载
--2021-04-28 21:20:34-- https://download.redis.io/releases/redis-6.2.2.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2454893 (2.3M) [application/octet-stream]
Saving to: ‘redis-6.2.2.tar.gz’
redis-6.2.2.tar.gz 100%[==========================================================