|
| 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