redis入门

Redis是一个内存高速缓存数据库,redis全称 Remote Dictionary Server(远程数据服务)
Redis是一个key-value存储系统,它支持很多数据类型:string、list、set、zset、hash
Redis以内存作为存储介质,读写数据效率高,远超过数据库。
Redis也支持持久化存储,即将数据定时存储备份到硬盘,当遭遇停电或者宕机的情况下数据不至于丢失。

安装redis

1
2
sudo apt-get install redis-server # ubuntu 安装
brew install redis # Mac安装

关闭、启动、重启 redis-server

1
2
3
4
# ubuntu 这里有点问题,通过杀进程的方式关闭不了redis,得用下面的这种方式
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart

redis 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ps -ef|grep redis # 查看redis进程

redis-cli # redis 命令界面 - 本地连接
redis-cli -h REDIS_HOST_IP_ADDR -p 6379 -a 123456 # redis 命令界面 - 通过IP地址连接

brew services start redis # Mac 启动redis服务
brew services stop redis # Mac 关闭redis服务
brew services restart redis # Mac 重启redis服务

ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents # Mac 使用配置文件启动redis-server
redis-server /usr/local/etc/redis.conf # Mac 使用配置文件启动redis-server
redis-cli shutdown # Mac 停止redis服务
/usr/local/etc/redis.conf # Mac redis配置文件位置
brew uninstall redis rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist # 卸载redis

redis 常用用法

1
2
3
set age 25 # 设置一个 redis 数据 age
keys * # 查看 redis 数据
get age # 查看 redis 数据 age

如果设置了密码

如果设置了密码可能回报错

1
(error) NOAUTH Authentication required.

解决办法:

1
2
3
4
redis-cli
auth 'yourpassword'
keys *
# is ok, will show all keys!

redis-cluster

Redis支持集群模式,能够更稳定的存储数据

redis-sentinel

Redis 的 Sentinel 系统用于管理多个 Redis 服务器
sentinel配置实践如下,包括两个配置文件,一个是redis服务配置,另一个是sentinel配置

redis配置文件

1
2
3
4
5
6
7
port 6379
daemonize yes
#logfile "log/6379.log"
slave-read-only no
requirepass "123456"
dbfilename "dump-6379.rdb"
# dir "/Users/zsr/learn/redis/data/"

sentinel配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
port 26379
# dir "/Users/zsr/learn/redis/data"
# logfile "26379.log"
sentinel myid c83c4d372c28916980ac2eca754b13cc794359fd
sentinel monitor mymaster 10.242.22.138 6379 2
#sentinel auth-pass mymaster 123456a
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
# Generated by CONFIG REWRITE
sentinel known-slave mymaster 10.242.22.138 6380
sentinel known-slave mymaster 10.242.22.138 6381
sentinel current-epoch 0
protected-mode no

配置完毕之后,直接运用redis-server启动sentinel服务:

1
redis-server sentinel-26379.conf --sentinel &;

配置完毕之后,直接运用redis-server启动redis服务:

1
redis-server redis-6379.conf

利用ioredis nodejs连接sentinel方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const Redis = require('ioredis')
let redisConfig = {
sentinels: [{
host: '10.242.22.138',
port: 26379
}],
password: '123456',
name: 'mymaster'
}
const client = new Redis(redisConfig)
let redisIsOk = false
client.on('ready', () => {
redisIsOk = true
global.logger.server('redis is ready!')
})
client.on('error', (err) => {
redisIsOk = false
global.logger.server('redis is on error! errmsg:' + err.toString(), 'ERROR')
})

module.exports = {
/**
* 存入redis
* expire (单位:s)
*/
set: (key, value, expire) => {
return new Promise((resolve, reject) => {
if (!redisIsOk) {
reject(false)
}
client.set(key, value).then((res) => {
resolve(true)
})
expire = expire || 24*3600
// 过期时间默认1天
client.expire(key, expire)
})
},
/**
* return false || value
*/
get: (key) => {
return new Promise((resolve, reject) => {
if (!redisIsOk) {
reject(false)
}
client.get(key).then((value) => {
resolve(value)
})
})
},
del: (key) => {
if (!redisIsOk) {
reject(false)
}
return new Promise((resolve, reject) => {
client.del(key).then((value) => {
resolve(value)
})
})
}
}

相关链接

nodejs连接Redis开源库,支持sentinel
Mac 安装redis
redis文档