redis笔记

我记录的一些redis使用笔记。

命令中的<>表示必填项。

部署

docker方式

测试:
服务端:
docker pull redis
docker run -p 6379:6379 -d redis

使用docket部署,方便,默认端口6379。

物理机方式

重启:
service redis stop
service redis start

windows系统

一些思考

安全性怎么保证?限制IP(微服务中不好做),添加密码

集群如何做?

哈希crc16(key)%16384设计的好处?2^14 = 16384

value长度限制?

MySQL如何与redis保持数据一致性?

扩展思考:
每种服务单独有的数据库?这种设计好还是不好?

连接

1
2
3
4
5
redis-cli # 默认使用本地的6379

redis-cli -h 192.168.31.212 -p 6379

redis-cli -h <IP地址> -p <端口> -a <密码>

windows下可以使用RedisDesktopManager连接。

使用

以下默认已经连接好redis服务。在命令行中操作。

选择数据库:

1
2
select <N> # N为0~15 注:在RedisDesktopManager看到有16个,有说法是32个,存疑。
select 2 # 选择库2

查看keys是否存在:

1
EXISTS <key>

存在返回整数1,不存在返回0。
查看某个db所有的ky:

1
keys *

注意:如果数量太多,不建议这样做。

查看某个hash所有字段:

1
2
3
hgetall <哈希key>

已存在hash,新加一个字段及对应的值:

hset <哈希key> <新的字段> <对应的值>

1
2
3
4

获取hash内某个字段
hget <哈希key> <字段名>
hmget <哈希key> <字段名1> <字段名2>

不存在返回nil
获取某种匹配模式的key:

1
2
keys foo:abc*
获取该db所有以“foo:abc”开头的值

删除key:

1
2
3
4
5
6
删除hash某个字段
hdel <哈希key> <字段名>
删除string类型key
del <key>

注:成功返回整数1,失败(可能哈希key不存在)返回返回0。

清空所有数据库的key:

1
flushall

主从拷贝

主从:修改 bind 为0.0.0.0

从:

1
2
3
replicaof 127.0.0.1 6379
replicaof <容器名> 6379
masterauth 12345678

注:连接时提示Error: Connection reset by peer,怀疑是 bind 没有修改。
注:docker内的redis端口不用改,在外映射即可。如果均为容器部署,容器均在同一网段,则使用容器名称即可。
注:主从需在同一网段内,否则无法连接。
注:多个从,可使用同一配置文件。

维护相关

1
保存到磁盘:save

错误及解决

ReplyError: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

解决:
注释掉:
#save 900 1
#save 300 10
#save 60 10000
#dir /var/lib/redis

另一解法:
stop-writes-on-bgsave-error yes改为stop-writes-on-bgsave-error no

(error) NOAUTH Authentication required.
解决:

1
127.0.0.1:6379> auth 12345678