Skip to content

Commit 341af2c

Browse files
committedSep 12, 2022
update
1 parent 8557f1b commit 341af2c

File tree

1 file changed

+261
-0
lines changed

1 file changed

+261
-0
lines changed
 

‎article/java/basic/Redis.md

+261
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,261 @@
1+
# Redis 使用手册
2+
3+
## 简介
4+
5+
Redis(Remote Dictionary Server)是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
6+
7+
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
8+
9+
Redis 通常被称为数据结构服务器,因为(value)可以是字符串(String)、哈希(Hash)、列表(List)、集合(sets)和有序集合(sorted sets)等类型。
10+
11+
## 安装
12+
13+
下载地址:https://github.com/tporadowski/redis/releases
14+
15+
Windows 下安装:Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip 压缩包并解压(例如解压后目录为:D:\Develop\Redis-x64-5.0.14.1)。
16+
17+
打开一个 cmd 窗口 使用 cd 命令切换目录到解压目录:
18+
19+
> $ cd D:\Develop\Redis-x64-5.0.14.1
20+
21+
运行命令:
22+
23+
> $ ./redis-server.exe redis.windows.conf
24+
25+
后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的,显示如下:
26+
27+
```text
28+
PS D:\Develop\Redis-x64-5.0.14.1> ./redis-server.exe redis.windows.conf
29+
[25528] 12 Sep 18:49:49.119 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
30+
[25528] 12 Sep 18:49:49.119 # Redis version=5.0.14.1, bits=64, commit=ec77f72d, modified=0, pid=25528, just started
31+
[25528] 12 Sep 18:49:49.119 # Configuration loaded
32+
_._
33+
_.-``__ ''-._
34+
_.-`` `. `_. ''-._ Redis 5.0.14.1 (ec77f72d/0) 64 bit
35+
.-`` .-```. ```\/ _.,_ ''-._
36+
( ' , .-` | `, ) Running in standalone mode
37+
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
38+
| `-._ `._ / _.-' | PID: 25528
39+
`-._ `-._ `-./ _.-' _.-'
40+
|`-._`-._ `-.__.-' _.-'_.-'|
41+
| `-._`-._ _.-'_.-' | http://redis.io
42+
`-._ `-._`-.__.-'_.-' _.-'
43+
|`-._`-._ `-.__.-' _.-'_.-'|
44+
| `-._`-._ _.-'_.-' |
45+
`-._ `-._`-.__.-'_.-' _.-'
46+
`-._ `-.__.-' _.-'
47+
`-._ _.-'
48+
`-.__.-'
49+
50+
[25528] 12 Sep 18:49:49.135 # Server initialized
51+
[25528] 12 Sep 18:49:49.135 * Ready to accept connections
52+
```
53+
54+
这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。
55+
56+
切换到 redis 目录下运行:
57+
58+
> $ ./redis-cli.exe -h 127.0.0.1 -p 6379
59+
60+
设置键值对:
61+
62+
> $ set myKey abc
63+
64+
取出键值对:
65+
66+
> $ get myKey
67+
68+
输出如下:
69+
70+
```text
71+
127.0.0.1:6379> set myKey abc
72+
OK
73+
127.0.0.1:6379> get myKey
74+
"abc"
75+
127.0.0.1:6379>
76+
```
77+
78+
## 数据类型
79+
80+
Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
81+
82+
### String(字符串)
83+
84+
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
85+
86+
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。
87+
88+
示例:
89+
90+
> // 设置一个字符串
91+
>
92+
> $ set test "这是一个字符串,哈哈哈哈哈哈"
93+
>
94+
> // 读取字符串
95+
>
96+
> $ get test
97+
98+
输出如下:
99+
100+
```text
101+
127.0.0.1:6379> set test "这是一个字符串,哈哈哈哈哈哈"
102+
OK
103+
127.0.0.1:6379> get test
104+
"这是一个字符串,哈哈哈哈哈哈"
105+
```
106+
107+
### Hash(哈希)
108+
109+
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
110+
111+
每个 hash 可以存储 232 -1 键值对(40多亿)。
112+
113+
示例:
114+
115+
> // 设置一个 Hash
116+
>
117+
> $ hmset person name "dnm" age 18
118+
>
119+
> // 读取 person 的 name
120+
>
121+
> $ hget person name
122+
>
123+
> // 读取 person 的 age
124+
>
125+
> $ hget person age
126+
>
127+
> // 删除 person
128+
>
129+
> $ del person
130+
131+
输出如下:
132+
133+
```text
134+
127.0.0.1:6379> hmset person name "dnm" age 18
135+
OK
136+
127.0.0.1:6379> hget person name
137+
"dnm"
138+
127.0.0.1:6379> hget person age
139+
"18"
140+
127.0.0.1:6379> del person
141+
(integer) 1
142+
```
143+
144+
### List(列表)
145+
146+
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
147+
148+
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
149+
150+
示例:
151+
152+
> // 向列表 list 中插入一条数据 apple
153+
>
154+
> $ lpush list apple
155+
> $ lpush list banana
156+
> $ lpush list orange
157+
>
158+
> // 读取 list 中的前 10 条数据
159+
>
160+
> $ lrange list 0 10
161+
162+
输出如下:
163+
164+
```text
165+
127.0.0.1:6379> lpush list apple
166+
(integer) 1
167+
127.0.0.1:6379> lpush list banana
168+
(integer) 2
169+
127.0.0.1:6379> lpush list orange
170+
(integer) 3
171+
127.0.0.1:6379> lrange list 0 10
172+
1) "orange"
173+
2) "banana"
174+
3) "apple"
175+
```
176+
177+
### Set(集合)
178+
179+
Redis 的 Set 是 string 类型的无序集合。
180+
181+
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
182+
183+
#### sadd 命令
184+
185+
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
186+
187+
示例:
188+
189+
> // 向集合 set 中插入一条数据 apple
190+
>
191+
> $ sadd set apple
192+
> $ sadd set banana
193+
> $ sadd set orange
194+
>
195+
> // 读取 set 中的数据
196+
>
197+
> $ smembers set
198+
199+
输出如下:
200+
201+
```text
202+
127.0.0.1:6379> sadd set apple
203+
(integer) 1
204+
127.0.0.1:6379> sadd set banana
205+
(integer) 1
206+
127.0.0.1:6379> sadd set orange
207+
(integer) 1
208+
127.0.0.1:6379> smembers set
209+
1) "orange"
210+
2) "apple"
211+
3) "banana"
212+
```
213+
214+
#### zset(sorted set:有序集合)
215+
216+
Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。
217+
218+
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
219+
220+
zset 的成员是唯一的,但分数(score)却可以重复。
221+
222+
#### zadd 命令
223+
224+
添加元素到集合,元素在集合中存在则更新对应 score。
225+
226+
示例:
227+
228+
> // 向集合 set 中插入一条数据 apple
229+
>
230+
> $ zadd set_order 0 apple
231+
> $ zadd set_order 0 banana
232+
> $ zadd set_order 0 orange
233+
>
234+
> // 读取 set 中的数据
235+
>
236+
> $ zrangebyscore set_order 0 10
237+
238+
输出如下:
239+
240+
```text
241+
127.0.0.1:6379> zadd set_order 0 apple
242+
(integer) 1
243+
127.0.0.1:6379> zadd set_order 0 banana
244+
(integer) 1
245+
127.0.0.1:6379> zadd set_order 0 orange
246+
(integer) 1
247+
127.0.0.1:6379> zrangebyscore set_order 0 10
248+
1) "apple"
249+
2) "banana"
250+
3) "orange"
251+
```
252+
253+
## 参考资料
254+
255+
Redis 官网:https://redis.io
256+
257+
源码地址:https://github.com/redis/redis
258+
259+
Redis 在线测试:http://try.redis.io/
260+
261+
Redis 教程:https://www.runoob.com/redis/redis-tutorial.html

0 commit comments

Comments
 (0)
Failed to load comments.