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 = {
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 client.expire(key, expire) }) },
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文档