redis是以set/get方式存储和获取数据的key-value存储系统 。
redis有五种数据类型:string、list、hash、set、zset。对于不同的数据类型,又不同的操作。
Redis常用操作
string类型操作
SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key
MSET key value [key value ...]
MGET key [key ...]
SETEX key seconds value
SETNX key value # 常用来实现分布式锁
INCR key # 如果value时数值类型,则对value自增1,并返回
DECR key #
INCRBY key increment
DECRBY key decrement
hash类型操作
HSET key field value
HGET key field
HMGET key field [field ...]
HMSET key field value [field value ...]
HDEL key filed [field ...]
HEXISTS key field
HGETALL key # 返回key下所有的feild和value
HINCRYBY key filed increment
HKEYS key # 返回key下所有的feild
HLEN key # 返回key下feild的数量
HVALS key # 返回key下所有的feild和value
list类型操作
LPUSH key value [value ...] # 将多个值依次插入到表头
LPUSHX key value # 存在时push
LPOP key # 移除后返回左边的值
LRANGE key start stop # 返回start和stop之间的元素
LLEN key # 返回list的长度
RPUSH key value [value ...]
RPUSHX key value
RPOP key
RPOPLPUSH source destination # 将source的尾元素弹出并插入到destination的头部,并返回该元素
set类型操作
SADD key number [member ...]
SCARD key # 返回集合中元素的数量
SISMEMBER key member # 是否为此集合的成员
SMEMBERS key # 返回所有成员
SMOVE source desination member # 将member元素从source集合移动到destination集合
SPOP key [count] # 随机移除并返回集合中count个值
SRANDMEMBER key [count] # 同上,但不移除
SREM key member [member ...] # 移除集合中的多个元素
## 集合运算
SUNION key [key ...] # 多个集合的并集
SUNIONSTORE destination key [key ...] # 多个集合的并集并存储在destination中
SINTER key [key ...] # 交集
SINTERSTORE destination key [key ...]
SDIFF key [key ...] # 差集
SDIFFSTORE destionation key [key ...]
zset类型操作
zset类型中的每个元素都有一个score
ZADD key score member [[score member] [score member] ...] # 添加
ZCARD key # 返回个数
ZCOUNT key min max # 返回score在min到max之间的元素个数
ZREM key member [member ...] # 删除
ZRANGE key start stop [WITHSCORES] # 返回score在start和stop之间的元素
ZRANK key mumber # 返回member的score排名
ZREMRANGEBYRANK key start stop # 根据排名删除
ZREMRANGEBYSCORE key min max # 根据score删除
## score运算
zincrby key -1 #
## 集合运算
Redis的Key相关操作
EXISTS key
DEL key [key ...]
EXPIRE key seconds # 设置key的鬼泣时间
KEYS pattern # 返回匹配的keys
PERSIST key # 移除key的过期时间(不过期)
RANDOMKEY # 随机返回一个key
RENAME key newkey # 重命名一个key
TYPE key # key中存储数据的类型(5种类型)
TTL key # 返回key的剩余生存时间(秒)
PTTL key # 返回key的剩余生存时间(毫秒)
Redis 发布订阅操作
PUBLISH channel message # 将信息发送到指定的频道。
SUBSCRIBE channel [channel ...] # 订阅给定的一个或多个频道的信息。
UNSUBSCRIBE [channel [channel ...]] # 退订
redis数据备份和恢复
1. dump : 手动执行或者配置save
SAVE # 备份
# 该命令将在 redis 安装目录中创建dump.rdb文件,将数据进行备份
BGSAVE # 后台备份
# 创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。
# 如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
2. aof日志 :手动执行bgrewriteaof 或者配置
aof默认是关闭的,需要以下配置:
appendonly yes
# appendfsync always
appendfsync everysec
# appendfsync no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 重启redis即可根据aof日志恢复
redis分布式高可用
每个节点如下配置:
port 7000 # 端口7000,7001,7002,与目录对应
bind 172.28.37.29 #默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes #redis后台运行
cluster-enabled yes #开启集群
cluster-config-file nodes_7000.conf #集群的配置,配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout 8000 #请求超时,默认15秒,可自行设置
appendonly yes #开启aof持久化模式,每次写操作请求都追加到appendonly.aof文件中
appendfsync always #每次有写操作的时候都同步
logfile "/data/redis/logs/redis.log" #redis服务日志
pidfile /var/run/redis_7000.pid #pidfile文件对应7000,7001,7002
启动时可用脚本:
# 启动脚本
for((i=0;i<3;i++));
do /usr/local/bin/redis-server /usr/local/redis/redis-cluster/700$i/redis.conf;
done