一.干啥的?特点
Redis是一个开源高性能键值对数据库。她通过提供多种键值数据类型来使用不同场景的需求。Redis中所有数据都存储在内存中(问题来了,程序退出后内存中的数据会丢失),因此,Redis在性能上对比其他基于硬盘存储的数据库有明显的优势。
一个空Redis实例只有1M左右,非常轻量级。
一般使用:缓存、队列系统等。
二. 安装
MAC中通过homebrew安装比较简单:
brew install redis
ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
三.启动和停止Redis
3.1 开发环境启动Redis
redis-server #默认6379端口
redis-server --port 6380 #指定6380端口
3.2 通过初始化脚本启动
3.3停止Redis
redis-cli SHUTDOWN
注意的是,这里不能强行终止Redis,因为内存中的数据可能同步在硬盘中,强行终止可能导致数据丢失。接收到关闭命令后Redis会执行:
- 断开客户端连接
- 根据配置持久化
- 完成退出
四. Redis客户端
4.1 发送命令
通过redis-cli项redis发送命令有两种方式:
- 将命令作为redis-cli的参数`
redis-cli -h 127.0.0.1 -p 6379 #默认配置可以通过参数自定义配置
- 不附带参数运行redis-cli会进入交互模式:
$ redis-cli
redis 127.0.01:6379>ping
PONG
redis 127.0.01:6379>echo hello world
hello world
4.2 命令返回值
- 状态回复(例如:设置状态成功回复:OK)
redis 127.0.01:6379>ping
PONG
- 错误回复(以error开头)
127.0.0.1:6379> SHOTDOWN
(error) ERR unknown command 'SHOTDOWN'
- 整数回复(例如:递增键值命令会以证书形式返回递增后的键值)
127.0.0.1:6379> incr foo
(integer) 1
- 字符串回复
127.0.0.1:6379> get foo
"1"
127.0.0.1:6379> get no #特殊情况下键值不存在返回nuil
(nil)
- 多行字符串回复
127.0.0.1:6379> keys *
1) "foo"
1) "too"
4.3 多数据库
与关系数据库中的可以创建多个数据库相似,Redis提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中,可以理解为每个字典都是一个独立的数据库。可以使用select命令更换数据库:
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
每个数据库对外都是以0开始递增数字命名的,Redis支持16个数据库。Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录那些数据存储了哪些数据。Redis不支持每个数据库设置不同的访问密。多个数据库之间并不是完全隔离的。
由于Redis的这种特性,这些数据库更像是一种命名空间,而不适宜存储不同的应用的数据。
五. 基础命令
Redis命令并不区分大小写
5.1 判断键是否存在
127.0.0.1:6379> exists test #存在返回1 ,不存在返回0
(integer) 1
5.2 赋值与取值
127.0.0.1:6379> set test 2 #存储 key=test value=2
OK
127.0.0.1:6379> keys * #查看所有键(键值多会影响性能不建议使用)
1) "test"
2) "foo"
127.0.0.1:6379> get test #取值 key=test
"2"
127.0.0.1:6379> set test 3 #同名key会覆盖
OK
127.0.0.1:6379> get test
"3"
5.3 删除键
127.0.0.1:6379> del test
(integer) 1
127.0.0.1:6379> del test
(integer) 0
5.4 获得键值的数据类型
127.0.0.1:6379> type test
string