1.进入redis客户端
➜ redis git:(master) ✗ redis-cli
127.0.0.1:6379> ping PONG 127.0.0.1:6379>表明redis已经成功的在计算机安装
2.获取所有配置信息
127.0.0.1:6379> config get *
1) "dbfilename"# 设置 dump 的文件位置
2) "dump.rdb"
3) "requirepass"# 设置认证密码
4) ""
5) "masterauth" 6) "" 7) "unixsocket"# 指定 unix socket 的路径。
8) ""
9) "logfile"# 指定日志文件的位置
10) "/usr/local/redis/log-redis.log"
11) "pidfile" 12) "/usr/local/redis/redis.pid" 13) "slave-announce-ip" 14) "" 15) "maxmemory"# 如果你设置了这个值,当缓存的数据容量达到这个值, redis 将根据你选择的# eviction 策略来移除一些 keys。## 如果 redis 不能根据策略移除 keys ,或者是策略被设置为 ‘noeviction’,# redis 将开始响应错误给命令,如 set,lpush 等等,# 并继续响应只读的命令,如 get
16) "0"
17) "maxmemory-samples" 18) "5" 19) "timeout"# 指定在一个 client 空闲多少秒之后关闭连接(0 就是不管它)
20) "300"
21) "auto-aof-rewrite-percentage" 22) "100" 23) "auto-aof-rewrite-min-size" 24) "67108864" 25) "hash-max-ziplist-entries" 26) "512" 27) "hash-max-ziplist-value" 28) "64" 29) "list-max-ziplist-size" 30) "-2" 31) "list-compress-depth" 32) "0" 33) "set-max-intset-entries" 34) "512" 35) "zset-max-ziplist-entries" 36) "128" 37) "zset-max-ziplist-value" 38) "64" 39) "hll-sparse-max-bytes" 40) "3000" 41) "lua-time-limit" 42) "5000" 43) "slowlog-log-slower-than" 44) "10000" 45) "latency-monitor-threshold" 46) "0" 47) "slowlog-max-len" 48) "128" 49) "port" 50) "6379" 51) "tcp-backlog"# TCP 监听的最大容纳数量
52) "511"
53) "databases"# 设置数据库的数目。# 默认数据库是 DB 0,你可以在每个连接上使用 select命令选择一个不同的数据库,# 但是 dbid 必须是一个介于 0 到 databasees - 1 之间的值
54) "8"
55) "repl-ping-slave-period" 56) "10" 57) "repl-timeout" 58) "60" 59) "repl-backlog-size" 60) "1048576" 61) "repl-backlog-ttl" 62) "3600" 63) "maxclients"# 一旦达到最大限制,redis 将关闭所有的新连接# 并发送一个‘max number of clients reached’的错误。
64) "10000"
65) "watchdog-period" 66) "0" 67) "slave-priority"# 当 master 不能正常工作的时候,Redis Sentinel 会从 slaves 中选出一个新的 master,# 这个值越小,就越会被优先选中,但是如果是 0 , 那是意味着这个 slave 不可能被选中。## 默认优先级为 100。
68) "100"
69) "slave-announce-port" 70) "0" 71) "min-slaves-to-write" 72) "0" 73) "min-slaves-max-lag" 74) "10" 75) "hz" 76) "10" 77) "cluster-node-timeout" 78) "15000" 79) "cluster-migration-barrier" 80) "1" 81) "cluster-slave-validity-factor" 82) "10" 83) "repl-diskless-sync-delay" 84) "5" 85) "tcp-keepalive"# tcp 心跳包。
# 推荐一个合理的值就是60秒
86) "300"
87) "cluster-require-full-coverage" 88) "yes" 89) "no-appendfsync-on-rewrite" 90) "no" 91) "slave-serve-stale-data"################################# 主从复制 ################################# # 主从复制。使用 slaveof 来让一个 redis 实例成为另一个reids 实例的副本。# 注意这个只需要在 slave 上配置。## slaveof# 如果 master 需要密码认证,就在这里设置# masterauth # 当一个 slave 与 master 失去联系,或者复制正在进行的时候,# slave 可能会有两种表现:## 1) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,# 或者数据可能是空的在第一次同步的时候## 2) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,# slave 都将返回一个 "SYNC with master in progress" 的错误,#
92) "yes"
93) "slave-read-only"你可以配置一个 slave 实体是否接受写入操作。# 通过写入操作来存储一些短暂的数据对于一个 slave 实例来说可能是有用的,# 因为相对从 master 重新同步数而言,据数据写入到 slave 会更容易被删除。# 但是如果客户端因为一个错误的配置写入,也可能会导致一些问题。## 从 redis 2.6 版起,默认 slaves 都是只读的。## Note: read only slaves are not designed to be exposed to untrusted clients# on the internet. It's just a protection layer against misuse of the instance.# Still a read only slave exports by default all the administrative commands# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve# security of read only slaves using 'rename-command' to shadow all the# administrative / dangerous commands.# 注意:只读的 slaves 没有被设计成在 internet 上暴露给不受信任的客户端。# 它仅仅是一个针对误用实例的一个保护层。
94) "yes"
95) "stop-writes-on-bgsave-error"# 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,# 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,# 否则就会没人注意到灾难的发生。## 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。## 然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。
96) "yes"
97) "daemonize" 98) "yes" 99) "rdbcompression"# 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串# 默认都设为 yes# 如果你希望保存子进程节省点 cpu ,你就设置它为 no ,# 不过这个数据集可能就会比较大
100) "yes"
101) "rdbchecksum"# 是否校验rdb文件
102) "yes"
103) "activerehashing" 104) "yes" 105) "protected-mode" 106) "yes" 107) "repl-disable-tcp-nodelay" 108) "no" 109) "repl-diskless-sync" 110) "no" 111) "aof-rewrite-incremental-fsync" 112) "yes" 113) "aof-load-truncated" 114) "yes" 115) "maxmemory-policy"# 最大内存策略,你有 5 个选择。# # volatile-lru -> remove the key with an expire set using an LRU algorithm# volatile-lru -> 使用 LRU 算法移除包含过期设置的 key 。# allkeys-lru -> remove any key accordingly to the LRU algorithm# allkeys-lru -> 根据 LRU 算法移除所有的 key 。# volatile-random -> remove a random key with an expire set# allkeys-random -> remove a random key, any key# volatile-ttl -> remove the key with the nearest expire time (minor TTL)# noeviction -> don't expire at all, just return an error on write operations# noeviction -> 不让任何 key 过期,只是给写入操作返回一个错误
116) "noeviction"
117) "loglevel"# 定义日志级别。
# debug (适用于开发或测试阶段)
# notice (适用于生产环境)
118) "debug"
119) "supervised" 120) "no" 121) "appendfsync" 122) "everysec" 123) "syslog-facility"# 设置 syslog 的 facility,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值。
124) "local0"
125) "appendonly" 126) "no" 127) "dir"# 工作目录# 例如上面的 dbfilename 只指定了文件名,# 但是它会写入到这个目录下。这个配置项一定是个目录,而不能是文件名。
128) "/usr/local/redis/db"
129) "save"存 DB 到磁盘:## 格式:save <间隔时间(秒)> <写入次数>写入次数> 间隔时间(秒)>
# 下面的例子的意思是:# 900 秒内如果至少有 1 个 key 的值变化,则保存# 300 秒内如果至少有 10 个 key 的值变化,则保存# 60 秒内如果至少有 10000 个 key 的值变化,则保存
130) "900 1 300 10 60 10000"
131) "client-output-buffer-limit" 132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60" 133) "unixsocketperm" 134) "0" 135) "slaveof" 136) "" 137) "notify-keyspace-events" 138) "" 139) "bind"# 你如果只想让它在一个网络接口上监听,那你就绑定一个IP或者多个IP。
# bind 192.168.1.100 10.0.0.1
140) "127.0.0.1"
如果要更新配置,可以直接编辑 redis.conf文件,也可以通过config set命令进行更新
3.redis常用5种数据类型
字符串
注 - Redis命令不区分大小写,如SET
,Set
和set
都是同一个命令。字符串值的最大长度为 512MB。
127.0.0.1:6379> set name 'hello'
OK 127.0.0.1:6379> get name "hello" 127.0.0.1:6379>散列/哈希
这里HMSET
,HGETALL
是Redis的命令,而haxi是键的名称。
127.0.0.1:6379> hmset haxi aaaa bbbb '123213' 200
OK 127.0.0.1:6379> hgetall haxi 1) "aaaa" 2) "bbbb" 3) "123213" 4) "200" 127.0.0.1:6379>列表
列表的最大长度为2^32 - 1
个元素(4294967295
,每个列表可容纳超过40
亿个元素)。
127.0.0.1:6379> lpush lista redis
(integer) 1
127.0.0.1:6379> lpush lista mongdb (integer) 2 127.0.0.1:6379> lpush lista sqlite mysql (integer) 4 127.0.0.1:6379> lrange lista 0 10 1) "mysql" 2) "sqlite" 3) "mongdb" 4) "redis" 127.0.0.1:6379>集合
Redis集合是字符串的无序集合。在Redis中,您可以添加,删除和测试成员存在的时间O(1)复杂性。
127.0.0.1:6379> sadd seta redis
(integer) 1 127.0.0.1:6379> sadd seta mongdb sqlite sqlite mysql mysql (integer) 3 127.0.0.1:6379> smembers seta 1) "redis" 2) "mysql" 3) "sqlite" 4) "mongdb" 127.0.0.1:6379>注意 - 在上面的示例中,sqlite
mysql
被添加了两次,但是由于集合的唯一属性,所以它只算添加一次。
可排序集合
Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。
127.0.0.1:6379> zadd zset 0 bbbb
(integer) 1 127.0.0.1:6379> zadd zset 0 aaaa (integer) 1 127.0.0.1:6379> zadd zset 1 asdf (integer) 1 127.0.0.1:6379> zrangebyscore zset 0 10 1) "aaaa" 2) "bbbb" 3) "asdf" 127.0.0.1:6379> zadd zset 0 aa (integer) 1 127.0.0.1:6379> zadd zset 0 ccc (integer) 1 127.0.0.1:6379> zrangebyscore zset 0 10 1) "aa" 2) "aaaa" 3) "bbbb" 4) "ccc" 5) "asdf" 127.0.0.1:6379>