redis日常运维1
1.ziplist 压缩列表
> hmset profile "name" "Jack" "age" 28 "job" "Programmer"
OK
> object encoding profile
"ziplist"
hash-max-ziplist-value
hash-max-ziplist-entries
2. 查看版本
[]$redis-server --version
Redis server v=3.2.0 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=8ae788f3a42d3713
3.使用ruby
> eval "for i=1,512 do redis.call('RPUSH', KEYS[1], i)end" 1 "integers"
(nil)
> llen integers
(integer) 512
> rpush integers 513
(integer) 513
4.redis查看客户端
> client list
id=343 addr=ip:port fd=6 name= age=1804044 idle=0 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf
id=100275 addr=ip:por fd=7 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
5.redis集群
[]$redis-cli -c -p 6410
> get date
-> Redirected to slot [2022] located at ip:prot
(nil)
> cluster nodes
查询事务槽,所在槽2022,跳跃节点的分值2022
> cluster keyslot "date"
> cluster keyslot "date"
(integer) 2022
集群中槽的数量 16384
集群客户端命令(redis-cli -c -p port)
集群
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点
cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
槽(slot)
cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。
键
cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键
> cluster nodes
67e4476d08b0603c59d290945567031de361014d ip:prot slave 38c8ea7d4f071968dc8de23db1252b608bb56d4f 0 1514257331752 13 connected
cbee9282639ef8a33b7eddcf0fa1734139879629 ip:port master - 0 1514257333257 9 connected 410-818
6.修改redis密码
进入各个实例进行设置:
./redis-cli -c -p 7000
config set masterauth xxx
config set requirepass xxx
config rewrite
之后分别使用./redis-cli -c -p 7001,./redis-cli -c -p 7002…..命令给各节点设置上密码
注意:各个节点密码都必须一致,否则Redirected就会失败, 推荐这种方式,这种方式会把密码写入到redis.conf里面去,且不用重启
7.????
cluster只能使用0号数据库
> select 1
(error) ERR SELECT is not allowed in cluster mode
单机可以使用多号数据库
> select 1
OK
[1]>
8.清空数据库
flsushall
9. 消息通信:
meet加入集群中
ping 5选1,最长时间发送ping消息
pong 回复ping或者meet消息
publish
fail 节点下线
10.频道的订阅与退订
subscribe/publish/
psubscribe/punsubscribe
11.事务
multi/exec/watch
[1]> multi
OK
[1]> set "name" "jingjing"
QUEUED
[1]> get "name"
QUEUED
[1]> exec
1) OK
2) "jingjing"
exec/discard/watch/multi
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
FIFO先进先出
12.lua脚本
[1]> eval "return 'hello world'" 0
"hello world"
[1]> eval "return 1+1" 0
(integer) 2
[1]> script load "return 2*2"
"4475bfb5919b5ad16424cb50f74d4724ae833e72"
[1]> evalsha "4475bfb5919b5ad16424cb50f74d4724ae833e72" 0
(integer) 4
> eval "return redis.call('ping')" 0
PONG
[]$which r
[DEV-D0RIUMS:cnsz081618:4979:M ~]$redis-cli -p 4979 -a xxx --eval /xxx/cj/1.lua
1) (integer) 1
2) (integer) 2
3) (integer) 2
4) (integer) 3
5) (integer) 4
6) (integer) 4
7) (integer) 7
8) (integer) 1
9) (integer) 7
10) (integer) 2
不确定函数:sinter/sunion/sdiff/smembers/hkeys/hvals/keys
> eval "return redis.call('DBSIZE')" 0
(integer) 16
> script exists "4475bfb5919b5ad16424cb50f74d4724ae833e72" 0
1) (integer) 1
2) (integer) 0
> script load "return 'hi'"
"2f31ba2bb6d6a0f42cc159d2e2dad55440778de3"
> eval "return redis.call('SET',KEYS[1],ARGV[1])" 1 "msg" "hello world"
OK
evalsha保证要执行的脚本在从服务器载入过,存在于lua_scripts字典
> rpush numbers 3 1 2
(integer) 6
> sort numbers
1) "1"
2) "1"
3) "2"
4) "3"
5) "3"
6) "5"
> sort fruits by *-price
1) "banana"
2) "cherry"
3) "apple"
13. 获取slowlog
slowlog-log-slower-than
slowlog-max-len 日志超过slowlog-max-len多出来的日志会被删除
> slowlog get
1) 1) (integer) 1 # 日志的唯一标识符
2) (integer) 1512531260 # 命令执行时的UNIX时间戳
3) (integer) 26122 # 命令执行时长
4) 1) "flushdb" # 命令以及命令参数
2) 1) (integer) 0
2) (integer) 1512093200
3) (integer) 20905
4) 1) ""
2) ""
删除slawlog
[1]> slowlog reset
OK