Redis基础概念
Redis能够提供针对k-v型值的缓存及数据存储服务,它的主要特色归纳如下:
- 单线程工作模式
- in-memory工作模式
- 支持数据持久化
- 支持主从模式(能借助sentinel实现HA)
- 支持分布式架构(数据库切片)
安装Redis
若无特殊需求,Linux系统直接使用包管理工具安装redis即可。并且大多情况下,redis的配置文件不需要修改,可以直接启动服务。
- redis守护进程:6379/tcp
- redis配置文件:/etc/redis.conf
- redis日志文件:/var/log/redis
- redis服务端程序:/usr/bin/redis-server
- redis客户端程序:/usr/bin/redis-cli
Redis数据操作
redis有五种基本数据结构:
- 字符串 Str
- 哈希 Hash
- 列表 List
- 集合 Set
- 有序集合 Zset
使用redis-cli命令直接连上redis的交互式命令行接口,就可以进行数据的增删改查操作了,对于常见的编程语言,也提供有API接口对redis进行调用。
字符串
创建/修改
set key value [EX seconds] [PX milliseconds] [NX|XX]
>> set id 1 NX (只有key不存在时才创建)
>> set name brown XX (只有key存在时才修改)
>> set age 26
>> incr age (自增/自减,只有value是数值型时才可以)
>> decr age
>> set hobby tennis EX 10 (定义该值得存活时间)
删
del KEY
>> del id name age
>>flushdb 删除此数据库中的所有值
查
>> keys * 列出所有值
>> get hobby
哈希
创建
>> hmset score brown 99 alice 95 marry 87
>> hset score bob 80
删
>> hdel score bob
修改(先删再加)
>> hdel score brown
>> hset score brown 100
查
>> hget score brown
>> hmget score alice marry
列表
创建
>> lpush colors white black
>> rpush colors yellow red
>> lset colors 0 blue
删
>> lpop colors
>> rpop colors
修改
>> lset colors 1 blue
查
>> lindex colors 2
>> lrange colors 0 -1
集合
创建
>> sadd cities beijing shanghai hangzhou beijing (自动去重)
删
>> spop cities 2 (随机删除集中中的两个值)
查
>> srandmember cities 5 (取出5个值)
>> sismember citeis beijing
字典操作
>> sinter KEY1 KEY2 求交集
>> sunion KEY1 KEY2 求并集
有序集合
创建
>> zadd quiz 90 A 96 B 88 C
查
>> zrange quiz 0 -1 withscores
Redis事务功能
MULTI:开始一个事务;
EXEC: 执行事务;将命令队列中的所有命令依次提交、逐个执行,然后将命令结果一下返回给客户端;哪怕命令队列中某一条指令出错,不影响之后命令的执行;
WATCH:乐观锁;启动事务前,指明要监视的键,在EXEC命令执行前,如果有被监视的键的值发生改变,那么此次事务中的所有命令都不会被执行;
>>> watch id
>>> multi
>>> set id 100
>>> set name brown
>>> set gender Male
>>> set age 26
>>> exec
Redis发布/订阅
频道:以消息队列(list)形式保存数据
SUBSCRIBE: 客户订阅一个队列;
PUBLISH:频道管理员向频道发布消息;
UNSUBSCRIBE:客户退订此前订阅的频道;
Redis数据持久化
Redis有两种数据持久化方式:RDB和AOF
-
RDB: 基于快照方式;按配置文件中的策略,周期性地将数据保存至磁盘(SAVE命令);数据文件默认为dump.rdb;
配置文件中RDB相关参数:
SAVE 900 1 15分钟内至少1个key发生变化即触发RDB快照(fork一个子线程进行快照,依赖Linux内核写时同步机制保证数据同步)
SAVE 300 10
SAVE 60 10000
SAVE "" 表示不启用RDB备份
stop-writes-on-bgsave-error yes|no 若备份时出错,是否停止备份
rdbcompression yes|no 备份时是否压缩文件
rdbchecksum yes|no
dbfilename dump.rdb 备份文件名及存放位置
dir /var/lib/redis客户端可使用SAVA或BGSAVE命令手动执行快照;
- SAVE: 同步,在主线程中保存快照;此时会阻塞所有客户端请求;
- BGSAVE:异步模式
- AOF:记录每一次写操作至指定的文件尾部实现持久化;当redis重启时,通过自动重新执行文件中的命令重建数据库;
配置文件中AOF相关参数:
appendonly yes|no 是否开启AOF
appendfilename "appendonly.aof" AOF文件保存位置
appendfsync {always|everysec|no} 建议使用everysec,表示每秒通知一次内核进行写入(1s内可能有许多写操作)
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
客户端可以使用BGREWRITEAOF命令手动生成.aof文件
Reids主从模式
Redis主从模式具有以下特点:
- 一个Master可以有多个Slave;
- 支持链式复制;即Slave喝Master是相对而言的
- Master以非阻塞方式同步数据至slave;
配置方式:
- 配置一个外部的监听地址(bind字段)
- 配置文件中指明此节点是哪一个节点的Slave。slaveof <masterip> <masterport>
网友评论