Redis

Redis配置、命令、常见问题

Posted by Sun8min on May 13, 2019

Redis

redis.conf相关

配置密码

配置 requirepass <password>

持久化

  • RDB

    配置 save <seconds> <changes>

    满足间隔一定时间改变的键值个数,就保存快照

      # 以下几种情况,将会保存快照
      ## after 900 sec (15 min) if at least 1 key changed
      ## after 300 sec (5 min) if at least 10 keys changed
      ## after 60 sec if at least 10000 keys changed
      save 900 1
      save 300 10
      save 60 10000
    
  • AOF

    配置appendonly yes

异步保存失败时停止写入

配置 stop-writes-on-bgsave-error yes


常用命令

启动redis

## 使用conf文件
redis-server redis.conf
## 不使用conf文件
redis-server

查看帮助

redis-cli --help

命令行连接redis

redis-cli -h <hostname> -p <port> -a <password>
## 连接本地(默认)端口为6379(默认),不需要密码(默认)
redis-cli

基础数据类型

字符串string,哈希hash,列表list,集合set,有序集合zset

CRUD

  • 查看所有key keys *

  • 字符串string
      ## 添加foo=bar键值对
      127.0.0.1:6379> set foo bar
      OK
      ## 添加foo=bar2键值对(key值相同,覆盖)
      127.0.0.1:6379> set foo bar2
      OK
      ## 获取foo
      127.0.0.1:6379> get foo
      "bar2"
      ## 删除foo
      127.0.0.1:6379> del foo
      (integer) 1
    
  • 哈希hash
      ## 添加hashfoo的哈希,foo1=bar1,foo2=bar2键值对
      127.0.0.1:6379> hmset hashfoo foo1 bar1 foo2 bar2
      OK
      ## 添加hashfoo的哈希,foo1=bar2键值对(key值相同,覆盖)
      127.0.0.1:6379> hmset hashfoo foo1 bar2
      OK
      ## 查看hashfoo的哈希
      127.0.0.1:6379> hgetall hashfoo
      1) "foo1"
      2) "bar2"
      3) "foo2"
      4) "bar2"
      ## 查看hashfoo的哈希foo1的值
      127.0.0.1:6379> hget hashfoo foo1
      "bar2"
      ## 查看hashfoo的哈希bar2的值
      127.0.0.1:6379> hget hashfoo bar2
      (nil)
      ## 删除hashfoo
      127.0.0.1:6379> del hashfoo
      (integer) 1
    
  • 列表list
      ## 添加listfoo的列表,左侧头部加入值bar1
      127.0.0.1:6379> lpush listfoo bar1
      (integer) 1
      ## 添加listfoo的列表,左侧头部加入值bar2、bar3
      127.0.0.1:6379> lpush listfoo bar2 bar3
      (integer) 3
      ## 添加listfoo的列表,右侧尾部加入值bar1(值相同,追加而不是覆盖)
      127.0.0.1:6379> rpush listfoo bar1
      (integer) 4
      ## 查看listfoo的列表,下标0-3的值
      127.0.0.1:6379> lrange listfoo 0 3
      1) "bar3"
      2) "bar2"
      3) "bar1"
      4) "bar1"
      ## 修改listfoo列表中下标为3(第4个)的值为nar
      127.0.0.1:6379> lset listfoo 3 nar
      OK
      ## 取出listfoo左侧头部的值
      127.0.0.1:6379> lpop listfoo
      "bar3"
      ## 取出listfoo右侧尾部的值
      127.0.0.1:6379> rpop listfoo
      "nar"
      ## 获取listfoo列表的长度
      127.0.0.1:6379> llen listfoo
      (integer) 2
      ## 删除listfoo
      127.0.0.1:6379> del listfoo
      (integer) 1
    
  • 集合set
      ## 添加setfoo的set集合,加入值bar1
      127.0.0.1:6379> sadd setfoo bar1 
      (integer) 1
      ## 添加setfoo的set集合,加入值bar2 bar3
      127.0.0.1:6379> sadd setfoo bar2 bar3
      (integer) 2
      ## 添加setfoo的set集合,加入值bar1(值相同,不添加)
      127.0.0.1:6379> sadd setfoo bar1
      (integer) 0
      ## 查看setfoo的set集合
      127.0.0.1:6379> smembers setfoo
      1) "bar3"
      2) "bar2"
      3) "bar1"
      ## 移除setfoo的set集合的bar2
      127.0.0.1:6379> srem setfoo bar2
      (integer) 1
      ## setfoo的set集合是否存在bar
      127.0.0.1:6379> sismember setfoo bar2
      (integer) 0
      ## 查看setfoo的set集合的成员数
      127.0.0.1:6379> scard setfoo
      (integer) 2
      ## 删除setfoo的set集合
      127.0.0.1:6379> del setfoo
      (integer) 1
    
  • 有序集合zset
      ## 添加setfoo的zset有序集合,加入值分数1的bar1,分数2的bar2
      127.0.0.1:6379> zadd zsetfoo 1 foo1 2 foo2
      (integer) 2
      ## 添加setfoo的zset有序集合,加入值分数5的bar1(值相同,只改动分数)
      127.0.0.1:6379> zadd zsetfoo 5 foo1
      (integer) 0
      ## 添加setfoo的zset有序集合,加入值分数5的bar3(值不同,添加)
      127.0.0.1:6379> zadd zsetfoo 5 foo3
      (integer) 1
      ## 查看setfoo的zset有序集合的个数
      127.0.0.1:6379> zcard zsetfoo
      (integer) 3
      ## 查看setfoo的zset有序集合的成员和分数
      127.0.0.1:6379> zrange zsetfoo 0 2 withscores
      1) "foo2"
      2) "2"
      3) "foo1"
      4) "5"
      5) "foo3"
      6) "5"
      ## 移除setfoo的zset有序集合的foo1和foo2
      127.0.0.1:6379> zrem zsetfoo foo1 foo2
      (integer) 2
      ## 查看setfoo的zset有序集合的成员
      127.0.0.1:6379> zrange zsetfoo 0 2
      1) "foo3"
      ## 删除setfoo的zset有序集合
      127.0.0.1:6379> del zsetfoo
      (integer) 1
    

发布订阅

## 订阅者订阅频道channel_bala
127.0.0.1:6379> subscribe channel_bala
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel_bala"
3) (integer) 1

## 发布者发布频道channel_bala,消息wala
127.0.0.1:6379> publish channel_bala wala
(integer) 1

## 订阅者收到消息
1) "message"
2) "channel_bala"
3) "wala"

选择库

## 选择num号库,默认0
SELECT <num>

清空当前库

FLUSHDB

清空所有库

FLUSHALL

常见问题

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk

异步保存失败。具体原因查看日志,初步分析可能是磁盘空间不足或者redis文件及目录权限不足导致,如果想忽略它, redis.conf 配置 stop-writes-on-bgsave-error no