最近在尝试人生第一个网络编程小项目,有接触到Redis。这篇文章简单介绍一下Mac上使用Redis的基/本/法和踩过的坑。随着项目进展或许会不定期更新,也欢迎前辈们指出不正确的地方。
Redis
REmote DIctionary Server(Redis) 是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的,Key-Value数据库,并提供多种语言的API。同时,它也支持字符串、哈希、列表、集合等类型的存储。
通常我们将Redis作为缓存来使用。
安装 Redis
Mac安装Redis的过程比较简单,但也会碰到一些小问题。
- homebrew 上查看 Redis 版本以及本机是否已经安装了 Redis
输入命令: brew search redis
输出如下:
==> Formulae
hiredis redis redis-leveldb redis@3.2 ✔ redis@4.0
==> Casks
another-redis-desktop-manager redis
redis
例如我的电脑中 redis@3.2 已经安装,则会看到 redis@3.2 后面打了一个【√】,没有安装则不会有【√】 。
2. 安装 Redis 某个版本
输入命令:brew install redis@3.2
如果想下载 Redis 的其他版本,把后面的【3.2】替换成其他版本号即可。
如果没有更新 homebrew,则会看到命令执行后输出的第一条是 【updateding homebrew...】,然后会卡住很长时间。这时如果不想更新需要先停掉命令,然后取消 brew 的自动更新。
输入命令:export HOMEBREW_NO_AUTO_UPDATE=true
另一种方法是编辑 ~./bash_profile 文件,但是相对麻烦一些。本质上都是把上面这行命令加入 ~./bash_profile 这个文件中。
然后重新 brew install,即可下载并安装 Redis 了。
启动 Redis
方法一:redis-server
默认路径下输入命令:redis-server
输出:
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.13 (00000000/0) 64 bit
.-`` .-```. ```/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 81509
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
看到上述输出即表明启动成功。
方法二:brew services start redis
输入命令:brew services start redis@3.2 (或其他版本号)
这时,如果 brew 版本较旧(比如安装的时候没让它自动更新hhhh)会出现如下报错:
Error: Unknown command: services
这时就老老实实敲 brew update 然后慢慢等吧。。。
命令行使用 Redis
windows 系统下的 RedisDeskManager 和 RedisClient 都是常用的 Redis 图形界面客户端,Mac 下也有对应的 another-redis-desktop-manager。但本人比较懒,打算先用命令行试试。
- 进入 Redis 客户端:redis-cli
成功开启 Redis 的那个终端就先放在那,我们打开一个新的终端。
默认路径下输入:redis-cli
输出:127.0.0.1:6379>
这时就可以在【>】后面输入 redis 命令啦。
2. 查看 Redis 缓存:KEYS *
127.0.0.1:6379> KEYS *
1) "indexes::all_codes"
这个命令可以查看目前存放在 Redis 中全部的 key。
3. 查看 Redis 缓存内容:GET/LRANGE
127.0.0.1:6379> GET indexes::all_codes
GET 命令能够取出对应 key 值的全部内容(value)。与之对应的是【LRANGE KEY START END】命令,能够取出列表中指定区间内的元素,区间以偏移量 START 和 END 指定。
4. Redis 显示中文:--raw
使用命令行操作时,Redis 读取到的内容中的中文会显示为 16 进制的字符串,影响阅读。例如:
127.0.0.1:6379> GET indexes::all_codes
"["java.util.ArrayList",[["****",{"code":"399975","name":"xe8xafx81xe5x88xb8xe5x85xacxe5x8fxb8"}],..."
解决这个问题很简单,在连接客户端的时候加上 --raw 即可:
默认路径下输入:redis-cli --raw
127.0.0.1:6379> GET indexes::all_codes
["java.util.ArrayList",[["****",{"code":"399975","name":"证券公司"}],..."]
5. 关闭 Redis 客户端的连接:QUIT
QUIT 命令用于关闭当前客户端与 Redis 服务的连接。一旦所有等待中的回复(如果有的话)顺利写入了客户端,连接就会被关闭。
127.0.0.1:6379> QUIT
但这时,Redis 服务本身还没有被关闭。如需关闭 Redis 服务,还有最后一步。
关闭 Redis 服务
方法一:redis-cli shutdown
断开 redis 客户端之后,终端会回到默认路径(base)下。
输入:redis-cli shutdown
此时,会看到另一个启动 Redis 的终端下输出如下内容:
83196:M 08 May 15:24:58.713 # Server started, Redis version 3.2.13
83196:M 08 May 15:24:58.714 * DB loaded from disk: 0.001 seconds
83196:M 08 May 15:24:58.714 * The server is now ready to accept connections on port 6379
83196:M 08 May 15:28:08.857 # User requested shutdown...
83196:M 08 May 15:28:08.857 * Saving the final RDB snapshot before exiting.
83196:M 08 May 15:28:08.859 * DB saved on disk
83196:M 08 May 15:28:08.859 # Redis is now ready to exit, bye bye...
表示 Redis 成功关闭。
方法二:(非常不推荐)kill 进程的方式强制退出
在极端情况下也可以使用 kill -9 / kill -15 命令强行结束 Redis 进程,然而强行终止 Redis 进程可能会导致 Redis 持久化丢失。
输入:ps aux|grep redis (查看 redis 使用的进程)
输入:kill -15 *****(redis 进程号)
(如果必须使用,还是更推荐 kill -15)
第一部分就写到这里,欢迎围观。。。