Redis
epoll模式,单线程
default with 16 dbs
set key value
set key value ex 2 #只存活2s
keys *
get key
String操作:
ex:过期时间s
px:过期时间ms
nx,True,name不存在时,set才执行
xx,True,name存在时候,set才执行
setnx(name, value) #name不存在设置
setex(name, value, time) #过期时间,time是s或timedelta对象
psetex(name, time_ms, value) #过期时间,time是ms或timedelta对象
mset(*args, **kwargs) #批量设置
getset(name, value) #获取以前的值, 设置新值
getrange(name, start, end) #对取出的值按range切片
setrange(name, offset, value) #从偏移量开始替换
setbit(name, offset, value) #修改二进制位置 c
getbit(name, offset) #获取name的offset位置的值
bitcount name #显示name里有几个1
incr name #给name +1
decr name #给name -1
incrbyfloat name value #给name +value
append name value #给name追加value
hash操作:
hset hashname name value name value #存hash
hget hashname name #读hash
hkeys hashname #read hash keys
hvalues hashname #read hash values
hmset # set multi hash
hmget # get multi hash
hexist
hincrby
hscan
list
lpush names hinimix audrey sophie # create a list named names and append 3 elements from left #left push FILO
lrange names 0 -1 # print the elements of all
rpush names annie # append the list
LINSERT names before{after} hinimix TEST
lset names 2 test # set a value
lrem names 1 test # remove a value from finger
lindex names index # get value of index
ltrin names 1 2 # delete value , index not equal 1 2
rpoplpush names names2 #delete the rightmost from names and insert it to the leftmost of names2
blpop names 4 #wait 4s if names include nothing, otherwise return the last value
blpoplpush
set
smemberes name #list members of name
sadd name 1 2 33 33 # add a set named name
scard name #count numbers of name
sdiff name1 name2 # in name1, not in name2
sdiffstore name3 name1 name2 #store the result in name3 above
sinter name3 name4 #both in name3 or name4
sinterstore #same as above
sismember name value # judge value where is in name
smove src dst value #move a value from a set to another
spop name #pop from rightmost
srandmember #get member random
srem # delete a member
subscribe #
sunion name1 name2 # both in name3 and name4
order set
zadd h1 n h2 n h3 n name #zadd name weight
zrange name 0 -1 withscores
zinterstore new_name name1 name2 #find same name and add their store
other actions
del "a"
keys in* # list keys start with in
expire name time #set expire time
rename name
move name db # move name to db
publish and subscribe
import redis class RedisHelper: def __init__(self): self.__conn = redis.Redis(host="192.168.20.61", port=6379, db=1) self.chan_sub = 'hnm100.0' self.chan_pub = 'hnm100.0' def public(self, msg): self.__conn.publish(self.chan_pub, msg) return True def subscribe(self): pub = self.__conn.pubsub() #start subcribe pub.subscribe(self.chan_sub) pub.parse_response() return pub rh = RedisHelper() redis_sub = rh.subscribe() while True: msg = redis_sub.parse_response() print(msg)
http://redis.cn/commands.html
cluster saveconfig: 存储node-config信息
config rewrite: 存储配置文件信息
config get:
config set:
实例关闭命令
1
2
|
redid-cli shutdown 说明:关闭时强制 bgsave 所以需要一些时间 注:在start时,需要先加载数据到内存,数据加载完毕之后 redis 才会listen 端口 |
集群相关命令
1
2
3
|
1、CLUSTER INFO 打印集群的信息 2、CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 3、CLUSTER FAILOVER 手动故障转移,需要在slave节点上执行 |
节点 相关命令
1
2
3
4
|
1、CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。 2、CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。 3、CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。 4、CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。 |
槽(slot)相关命令
1
2
3
4
5
6
7
|
1、CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。 2、CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。 3、CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 4、CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。 1)、CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。 2)、CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。 3)、CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入( import )或者迁移(migrate)。 |
键相关命令
1
2
3
|
1、CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。 2、CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。 3、CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。 |
不支持的命令:
1
2
|
1、不支持SELECT 命令,集群只使用数据库 0 2、不支持多个KEY的操作 如 MSET、SUION、SINTER等命令 (因为KEYS 无法 hash 到同一个slot中) |
redis-trib.rb 相关命令
1
2
3
4
5
|
1、redis-trib.rb create [--replicas N] host:ip [host:ip ...] 创建集群 2、redis-trib.rb add-node host:ip host:ip 将前面的host:ip 添加到集群中 3、redis-trib.rb check host:ip 检查集群的状态 4、redis-trib.rb reshard host:ip OR redis-trib.rb reshard --from host:port --to host:port --slots -- yes 集群重新分片 5、redis-trib.rb del-node host:ip 'NODE ID' 将节点从集群中移除 |
Redis 慢查询
Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度。
服务器配置有两个和慢查询日志相关的选项:
slowlog-log-slower-than 选项指定执行时间超过多少微秒(1 秒等于 1,000,000 微秒)的命令请求会被记录到日志上。
举个例子, 如果这个选项的值为 100 , 那么执行时间超过 100 微秒的命令就会被记录到慢查询日志; 如果这个选项的值为 500 , 那么执行时间超过 500 微秒的命令就会被记录到慢查询日志; 诸如此类。
slowlog-max-len 选项指定服务器最多保存多少条慢查询日志。
服务器使用先进先出的方式保存多条慢查询日志: 当服务器储存的慢查询日志数量等于 slowlog-max-len 选项的值时, 服务器在添加一条新的慢查询日志之前, 会先将最旧的一条慢查询日志删除。
举个例子, 如果服务器 slowlog-max-len 的值为 100 , 并且假设服务器已经储存了 100 条慢查询日志, 那么如果服务器打算添加一条新日志的话, 它就必须先删除目前保存的最旧的那条日志, 然后再添加新日志。
例:首先用 CONFIG_SET 命令将 slowlog-log-slower-than 选项的值设为 0 微秒, 这样 Redis 服务器执行的任何命令都会被记录到慢查询日志中; 接着将 slowlog-max-len 选项的值设为 5 , 让服务器最多只保存5个;最后使用 SLOWLOG GET 命令查看服务器所保存的慢查询日志