Redis
环境安装
安装redis
$ brew install redis
启动客户端
# step1. 后台启动redis服务端
$ brew services restart redis
# step2. 启动redis客户端
$ redis-cli
127.0.0.1:6379> # ^ + C: 关闭客户端
# step3. 关闭后台服务
$ brew services stop redis
- 启动redis服务
# 方式一: 后台运行redis服务
$ brew services restart redis
# 方式二
$ redis-server
- 启动redis客户端
# 启动客户端, 默认port为6379
$ redis-cli
$ redis-cli -h 127.0.0.1 -p 6379
- 关闭redis客户端连接
# 关闭客户端
redis> shutdown
not connected> quit
- 关闭服务
$ brew services stop redis
# 强行终止
# $ sudo pkill redis-server
查看redis运行状况
$ brew services info redis
查看redis进程
$ ps axu | grep redis
查询redis密码
127.0.0.1:6379> config get requirepass
修改redis密码为"root"
127.0.0.1:6379> config set requirepass root
RedisInsight
redis可视化工具
简介
REmote DIctionary Server(Redis)
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件
非关系型数据库
数据结构类型
- String: 字符串
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
String 字符串
增
SET
# 变量赋值,如果已存在则覆盖
SET name "Coulson"
APPEND
# 如果变量存在,则末尾追加, 如果变量不存在,则相当于SET
append name " Zero"
删
del name
查
GET
# 获取字符串的内容
GET name
GETRANGE
# 返回字符串索引子串(开始索引,字符长度可越界)
getrange name 1 4
STRLEN
# 返回字符串长度
strlen name
EXISTS
# 存在为1,否则为0
exists name
示例
点击查看示例
redis>>> SET name "Coulson"
redis>>> APPEND name " Zero"
redis>>> GET name
"Coulson Zero"
redis>>> GETRANGE name 1 3
"oul"
redis>>> STRLEN name
(integer) 7
redis>>> exists name
(integer) 1
List 列表
增
如果list不存在,则新建
LPUSH & RPUSH
# 尾部添加
rpush mylist "mysql"
# 头部添加
lpush mylist "redis"
删
DEL
# 清空数组全部值
del mylist
RPOP & LPOP
# 删除并返回末尾最后一个元素
rpop mylist
# 删除并返回头部第一个元素
lpop mylist
查
LRANGE
# 查看数组所有内容
lrange mylist 0 -1
LINDEX
# 返回数组索引对应的值,空为nil
lindex mylist 0
lindex mylist -1
LLEN
# 数组长度
llen mylist
Hash 哈希字典
增
HMSET
hmset [key] [field] value [field value ...]
hmset myhash name "Coulson" age 25 country "China"
删
DEL
del myhash
HDEL
# 删除字段并返回索引
hdel [key] [field]
hdel myhash age
查
HGETALL
# 返回hash所有的字段和值
hgetall [key]
hgetall myhash
HGET & HMGET
# 返回单个字段值
hget [key] [field]
# 返回多个指定字段的值
hmget [key] [field ...]
hget myhash name
hmget myhash name age country
HKEYS
hget [key]
hkeys myhash
HVALS
hvals [key]
hvals myhash
示例
点击查看示例
127.0.0.1:6379> hmset myhash name "Coulson" age 25 country "China"
OK
127.0.0.1:6379> hgetall myhash
1) "name"
2) "Coulson"
3) "country"
4) "China"
127.0.0.1:6379> hget myhash name
"Coulson"
127.0.0.1:6379> hget myhash age
"25"
127.0.0.1:6379> hget myhash country
"China"
127.0.0.1:6379> hdel myhash age
(integer) 1
127.0.0.1:6379> HMGET myhash name age country
1) "Coulson"
2) (nil)
3) "China"
127.0.0.1:6379> hkeys myhash
1) "name"
2) "country"
127.0.0.1:6379> hvals myhash
1) "Coulson"
2) "China"
Set 集合
增
SADD
# 末尾增加元素, 如果元素存在则返回0并将此元素置于末尾,不存在返回1
sadd [key] [value ...]
# 末尾增加元素,并返回数量
sadd myset "mysql"
sadd myset "redis" "mongodb"
删
DEL
del myset
SPOP
# 删除指定索引元素,索引越界则返回整个集合的所有元素!
spop [key] [index]
spop myset 1
SREM
# 删除指定名称的元素
srem [key] [value]
srem myset "mysql"
查
SMEMBERS
# 查看Set集合中的所有元素
smembers [key]
smembers myset
SCARD
# 返回集合中元素的数量
scard [key]
scard myset
示例
点击查看Set示例
127.0.0.1:6379> sadd myset "mysql"
(integer) 1
127.0.0.1:6379> sadd myset "redis"
(integer) 1
127.0.0.1:6379> sadd myset "mongodb"
(integer) 1
127.0.0.1:6379> smembers myset
1) "redis"
2) "mongodb"
3) "mysql"
127.0.0.1:6379> sadd myset "mysql"
(integer) 0
127.0.0.1:6379> smembers myset
1) "redis"
2) "mongodb"
3) "mysql"
127.0.0.1:6379> SPOP myset 1
1) "mongodb"
127.0.0.1:6379> smembers myset
1) "redis"
2) "mysql"
127.0.0.1:6379> srem myset "mysql"
(integer) 1
127.0.0.1:6379> smembers myset
1) "redis"
Sorted Set 有序集合
增
ZADD
# 增加一个元素, 如果存在则舍弃之前的元素和索引,保留最新的
zadd myzset 1 "python"
# 增加多个元素
zadd myzset 2 "java" 3 "javascript"
删
ZPOPMAX & ZPOPMIN
# 删除最后一个元素
zpopmax [key]
# 删除第一个元素
zpopmin
查
ZRANGEBYLEX
# 按照插入时的顺序排列
ZRANGEBYLEX [key] - +
ZREVRANGE
-- 降序
ZREVRANGE "score" 0 -1 WITHSCORES
ZRANGE
-- 升序
ZRANGE [key] 0 -1 WITHSCORES
ZRANGE myzset 0 -1 WITHSCORES
ZSCORE
# 返回元素索引
zscore myzset "javascript"
ZCARD
# 返回长度(元素个数)
zcard [key]
示例
127.0.0.1:6379> zadd myzset 1 "python"
(integer) 1
127.0.0.1:6379> zadd myzset 2 "java" 3 "javascript"
(integer) 2
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "python"
2) "1"
3) "java"
4) "2"
5) "javascript"
6) "3"
127.0.0.1:6379> zscore myzset "javascript"
"3"
redis> ZRANGEBYLEX myzset - +
1) "python"
2) "java"
3) "javascript"
4) "rust"
测试命令
ECHO
输出
redis> ECHO HelloWorld!
HelloWorld!
PING
测试连接及其延时, 其后有参数时返回参数,无参数返回"pong" 客户端处于频道订阅模式下,它将是一个multi-bulk返回,第一次时返回”pong”,之后返回空(empty bulk),除非命令后面更随了参数
redis> PING
PONG
redis> PING "hello world"
"hello world"
SHUTDOWN
关闭连接
redis> shutdown
QUIT
关闭redis连接,退出redis-cli
redis> quit
SELECT
切换当前数据库索引
redis> select [index]
SAVE
创建当前数据库的备份
redis> save
Client
客户端连接
# 返回客户端列表
CLIENT LIST
# 返回当前客户端连接的名称
CLIENT SETNAME
# 挂起客户端连接
CLIENT PAUSE
# 关闭客户端连接
CLIENT KILL
FAQ
- Redis数据类型
String: 字符串
List: 列表
Hash: 哈希
Set: 集合
Zset: 有序集合
- Redis持久化机制
RDB: 将数据库快照以二进制的方式保存到磁盘中
AOF: 以协议文本的方式,将所有对数据库进行写入的命令和参数记录到AOF文件,从而记录数据库状态
- Redis: WRONGTYPE Operation against a key holding the wrong kind of value
redis 中已经存在同名,但不同类型的 key 值, 删除此 key 再重新执行即可