44
44
45
45
简单来说 ** Redis 就是一个使用 C 语言开发的数据库** ,不过与传统数据库不同的是 ** Redis 的数据是存在内存中的** ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。
46
46
47
- 另外,** Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。**
47
+ 另外,** Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。**
48
48
49
49
** Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。**
50
50
54
54
55
55
Memcached 是分布式缓存最开始兴起的那会,比较常用的。后来,随着 Redis 的发展,大家慢慢都转而使用更加强大的 Redis 了。
56
56
57
- 分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用的信息 。因为,本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他们两者之间的缓存数据是无法共同的。
57
+ 分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用信息的问题 。因为,本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他们两者之间的缓存数据是无法共同的。
58
58
59
59
### 3. 说一下 Redis 和 Memcached 的区别和共同点
60
60
@@ -72,7 +72,7 @@ Memcached 是分布式缓存最开始兴起的那会,比较常用的。后来
72
72
2 . ** Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache 把数据全部存在内存之中。**
73
73
3 . ** Redis 有灾难恢复机制。** 因为可以把缓存中的数据持久化到磁盘上。
74
74
4 . ** Redis 在服务器内存使用完之后,可以将不用的数据放到磁盘上。但是,Memcached 在服务器内存使用完之后,就会直接报异常。**
75
- 5 . ** Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 目前是原生支持 cluster 模式的. **
75
+ 5 . ** Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是 Redis 目前是原生支持 cluster 模式的。 **
76
76
6 . ** Memcached 是多线程,非阻塞 IO 复用的网络模型;Redis 使用单线程的多路 IO 复用模型。** (Redis 6.0 引入了多线程 IO )
77
77
7 . ** Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持。并且,Redis 支持更多的编程语言。**
78
78
8 . ** Memcached 过期数据的删除策略只用了惰性删除,而 Redis 同时使用了惰性删除与定期删除。**
@@ -116,7 +116,7 @@ _简单,来说使用缓存主要是为了提升用户体验以及应对更多
116
116
117
117
> QPS(Query Per Second):服务器每秒可以执行的查询次数;
118
118
119
- 所以 ,直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而,我们也就提高的系统整体的并发 。
119
+ 由此可见 ,直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而,我们也就提高了系统整体的并发 。
120
120
121
121
### 6. Redis 常见数据结构以及使用场景分析
122
122
@@ -126,9 +126,9 @@ _简单,来说使用缓存主要是为了提升用户体验以及应对更多
126
126
127
127
#### 6.1. string
128
128
129
- 1 . ** 介绍** :string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 ** 简单动态字符串** (simple dynamic string,** SDS** )。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1)(C 字符串为 O(N)),除此之外, Redis 的 SDS API 是安全的,不会造成缓冲区溢出。
130
- 2 . ** 常用命令: ** ` set,get,strlen,exists,decr,incr,setex ` 等等。
131
- 3 . ** 应用场景** : 一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
129
+ 1 . ** 介绍** :string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 ** 简单动态字符串** (simple dynamic string,** SDS** )。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1)(C 字符串为 O(N)),除此之外, Redis 的 SDS API 是安全的,不会造成缓冲区溢出。
130
+ 2 . ** 常用命令: ** ` set,get,strlen,exists,decr,incr,setex ` 等等。
131
+ 3 . ** 应用场景: ** 一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。
132
132
133
133
下面我们简单看看它的使用!
134
134
162
162
** 计数器(字符串的内容为整数的时候可以使用):**
163
163
164
164
``` bash
165
-
166
165
127.0.0.1:6379> set number 1
167
166
OK
168
167
127.0.0.1:6379> incr number # 将 key 中储存的数字值增一
175
174
" 1"
176
175
```
177
176
178
- ** 过期** :
177
+ ** 过期(默认为永不过期) ** :
179
178
180
179
``` bash
181
180
127.0.0.1:6379> expire key 60 # 数据在 60s 后过期
0 commit comments