redis

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 命令查看服务器所保存的慢查询日志


原文地址:https://www.cnblogs.com/hinimix/p/9198902.html