• 关于

    sadd

    的搜索结果

回答

有一种变通的方法,一定程度上可以实现简单、小数据量的模糊查询:写入用户信息时,将用户名分拆作为Key,来记录用户IDSADD user:like:j jack jackson SADD user:like:ja jack jackson SADD user:like:jac jack jackson SADD user:like:jack jack jackson SADD user:like:jacks jackson SADD user:like:jackso jackson SADD user:like:jackson jackson后面模糊查询时,输入:j,则可以从SET集合中查出jack、jackson两项,当然,这两项值可以用用户ID来代替,再根据用户ID来查询用户哈希信息。此方式仅适用于查询条件单一、且字段长度较短场景,如果:同时模糊匹配帖子标题和帖子文章,就不行了,标题还能试试,内容肯定无法实现的。当然Redis先天不适合做这件事,所以有别的方案,还是建议用别的方案来实现。

爵霸 2019-12-02 02:00:50 0 浏览量 回答数 0

问题

redis里的sadd如何删除

龙慈松溪 2019-12-01 19:24:02 1762 浏览量 回答数 3

问题

redis多对多模型设计

a123456678 2019-12-01 20:13:19 1093 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

问题

redisTemplate调用插入到redis中sadd报错 ?报错

爱吃鱼的程序员 2020-06-23 01:38:14 0 浏览量 回答数 1

问题

有关jedis的sscan命令疑问。

落地花开啦 2019-12-01 19:57:43 2987 浏览量 回答数 0

问题

关于redis删除某批键的应用

落地花开啦 2019-12-01 19:56:40 2300 浏览量 回答数 1

回答

如果是无序的话,用set存储用户的唯一id,如SADD users {id};然后用hash map存储用户的各种属性,如HSET user_{id} name "Tom"。这样你可以在set中查看用户数量,然后在set中增减的同时,同步操作hash中的对应user就行了

爵霸 2019-12-02 02:00:49 0 浏览量 回答数 0

回答

127.0.0.1:6379[1]> hmset zone tag1 1 tag2 2 tag3 3 tag4 4OK127.0.0.1:6379[1]> sadd tags tag1 tag2 tag3 tag4(integer) 4127.0.0.1:6379[1]> sort tags by zone->* get # limit 0 3 DESC1) "tag4"2) "tag3"3) "tag2"当日,时间已经过去一个多月

落地花开啦 2019-12-02 01:55:40 0 浏览量 回答数 0

回答

首先如果你要用多个字段的话,就不要单个单个存字段,或者把一个对象序列化以后再存,这样跟memcache完全没区别。其次,你要弄清一个事实,我们用redis不是来完全代替关系数据库的,像你说的那个按用户名搜索用户完全不用放到redis里,不要为了使用redis而去用redis。用redis你可以做缓存,这样你只需要把主键作为key,你也可以利用它的索引特性来做列表多个字段你可以用hash对象存储HMSET user:1234 name "hello" password "123456" timestamp "12321321"把主键存到一个SET或者SORTED SET里SADD user_list 1234值得注意的是redis的SORT命令可以代替SQL解决很多查询,比如像上面这种哈希存储方式,如果我们要按timestamp排序并在一定范围内列出user来SORT user_list BY user:*->timestamp GET # LIMIT 0 10 DESC它等同于SQL语句SELECT * FROM user ORDER BY timestamp DESC LIMIT 0 10

落地花开啦 2019-12-02 01:53:58 0 浏览量 回答数 0

回答

首先如果你要用多个字段的话,就不要单个单个存字段,或者把一个对象序列化以后再存,这样跟memcache完全没区别。其次,你要弄清一个事实,我们用redis不是来完全代替关系数据库的,像你说的那个按用户名搜索用户完全不用放到redis里,不要为了使用redis而去用redis。用redis你可以做缓存,这样你只需要把主键作为key,你也可以利用它的索引特性来做列表多个字段你可以用hash对象存储`HMSET user:1234 name "hello" password "123456" timestamp "12321321"`把主键存到一个SET或者SORTED SET里`SADD user_list 1234`值得注意的是redis的SORT命令可以代替SQL解决很多查询,比如像上面这种哈希存储方式,如果我们要按timestamp排序并在一定范围内列出user来SORT user_list BY user:*->timestamp GET # LIMIT 0 10 DESC它等同于SQL语句SELECT * FROM user ORDER BY timestamp DESC LIMIT 0 10

爵霸 2019-12-02 02:01:39 0 浏览量 回答数 0

回答

论是现实投票,还是网络投票,都要保证投票者身份的唯一性。一般我们会把投的票放入存储中,但是放到数据库里查询起来显然太慢了,而现在有了redis(http://redis.io ),你就可以把它放到set里了。下面我用php代码来演示这一过程,其它语言类同$userId = '111'; $questionId = '222'; // 用户111向问题222投票,那么我们把222的userId放到名为question:vote:111的set里 $redis->sAdd('question:vote:' . $questionId, $userId); // 判断222用户是否对111问题投过票了,只需判断111是否被包含在question:vote:111的set里 $isVoted = $redis->sIsMember('question:vote:' . $questionId, $userId); // 我们还可以取消投票,只需要从set里移除这个元素 $redis->sRem('question:vote:' . $questionId, $userId);所有的一切都在内存中进行,非常快速

落地花开啦 2019-12-02 02:42:41 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过 redis-benchmark 命令来进行测试。 请您参考: Usage: redis-benchmark [-h] [-p] [-c] [-n[-k] -h Server hostname (default 127.0.0.1) -p Server port (default 6379) -s Server socket (overrides host and port) -c Number of parallel connections (default 50) -n Total number of requests (default 10000) -d Data size of SET/GET value in bytes (default 2) -k 1=keep alive 0=reconnect (default 1) -r Use random keys for SET/GET/INCR, random values for SADD Using this option the benchmark will get/set keys in the form mykey_rand:000000012456 instead of constant keys, theargument determines the max number of values for the random number. For instance if set to 10 only rand:000000000000 - rand:000000000009 range will be allowed. -P Pipelinerequests. Default 1 (no pipeline). -q Quiet. Just show query/sec values 只显示每秒钟能处理多少请求数结果 -csv Output in CSV format -l Loop. Run the tests forever 永久测试 -t Only run the comma separated list of tests. The test names are the same as the ones produced as output. -I Idle mode. Just open N idle connections and wait. 如果问题还存在,请联系阿里云售后支持。

2019-12-01 23:30:48 0 浏览量 回答数 0

问题

ApsaraDB for Redis 如何进行性能测试

云栖大讲堂 2019-12-01 21:21:39 846 浏览量 回答数 0

问题

Redis-benchmark 使用介绍

云栖大讲堂 2019-12-01 21:21:33 863 浏览量 回答数 0

回答

有必要; Redis事务使用总结: Redis的事务机制允许同时执行多条指令,它是原子性操作,事务中的命令要么全部执行,要么全部不执行,另外,事务中的所有指令都会被序列化,而且其开始执行过程中,不回被即时过来的指令所打断,其需要经历三个过程,分别为开始事务、命令入队以及执行事务。 · 相关命令 · 如何使用 · 脚本事务 · 遇到问题 · 例子演示 一、相关命令 1、MULTI 该命令用来开启事务,它总是返回ok结果,当其执行之后,客户端可以继续发送任意条数量的指令,这些指令不会立即被执行,而是被放到了队列中,直到EXEC被调用之后,所有命令才会被序列化执行。 2、EXEC 该命令负责触发并执行队列中所有的命令。 NOTE: 如果MULTI开启之后,因为某些原因没有成功执行EXEC,那么事务中所有的命令都不会被执行的。 3、DISCARD 该命令用来刷新事务中所有排队等待执行的指令,它总是返回ok结果,并且将服务连接状态恢复到正常。如果已经使用WATCH,那么其会将释放所有被WATCH的key。 4、WATCH 标记所有指定的key被监控起来,使其在事务中有条件的执行(乐观锁)。 NOTE: A、WATCH使得EXEC命令需要有条件的执行,也就是事务只能在所有被监视的键没有被修改的前提下才能执行。另外,在EXEC被执行之后,所有的WATCH都会被取消。 B、UNWATCH手动取消对所有键的WATCH,如果执行了EXEC或者DISCARD,则不需要手动执行UNWATCH命令。 二、如何使用 Redis原生使用(Redis-cli): 127.0.0.1:6379> multi // 事务开始的动作标志下面即为入队 OK 127.0.0.1:6379> set book-name "Thinking in Java" QUEUED 127.0.0.1:6379> get book-name QUEUED 127.0.0.1:6379> sadd tag "java" "Programming""Thinking" QUEUED 127.0.0.1:6379> smembers tag QUEUED 127.0.0.1:6379> exec // 执行事务 1) OK 2) "Thinking in Java" 3) (integer) 3 4) 1) "Thinking" 2) "Programming" 3) "java" 127.0.0.1:6379> discard // 事务已执行完毕 已经自动取消 (error) ERR DISCARD without MULTI 127.0.0.1:6379> multi OK 127.0.0.1:6379> set book-name "Patterns in Java" QUEUED 127.0.0.1:6379> get book-name QUEUED 127.0.0.1:6379> sadd tag "Java" "Thinking""Programming" QUEUED 127.0.0.1:6379> smembers tag QUEUED 127.0.0.1:6379> discard // 事务未执行 可以刷新队列指令状态 取消执行 OK 127.0.0.1:6379> exec // 事务已经被取消不能再执行 (error) ERR EXEC without MULTI 三、脚本事务 Redis 2.6开始支持了脚本,而该脚本本身就是一种事务机制,所以任何在事务里可以完成的事,在脚本里面也能完成,并且使用脚本更简单些,并且速度也更快。不过因为事务提供了一种即使不使用脚本,也可以避免竞争条件的方法,并且事务本身的实现并不复杂,所以现在的使用也比较多,但不排除日后可能被替代或是占据主要地位的可能。 NOTE: Redis为什么引入两种处理事务的方式?脚本功能是 Redis 2.6 才引入的,而事务功能则在更早之前就存在,所以 Redis 才会同时存在两种处理事务的方法。另外,事务脚本会在后续文章中总结介绍。 四、遇到问题 1、乐观锁实现 举个例子,假设我们需要原子性为某个键加1操作(假设INCR不存在),那么应该是这样的执行语句: SET mykey 1 val = GET mykey val = val + 1 SET mykey ${val} 单个客户端访问操作没有任何问题,如果是多个客户端同时访问mykey,就会产生资源共享访问问题,比如:现在有个两个客户端访问同一个键mykey,那么mykey的可能是2,但是我们期望的值应该是3才对,这个类似于高并发下的sync锁机制,所以我们需要使用WATCH来监控被共享的键mykey,如下: WATCH mykey(可监控多个键) val = GET mykey val = val + 1 MULTI SET mykey ${val} EXEC NOTE: 虽然大多情况下,多个客户端访问操作同一个键的情况很少或没有,但是不能排除这个特殊情况,所以建议在有可能产生键共享的指令中使用WATCH在EXEC执行前对其监管。 2、Redis不支持回滚(Roll Back) Redis的事务不支持回滚,这点不同于关系数据库中的事务,所以它的内部保持了简单且快速的特点。另外,Redis不支持回滚是这样考虑的:Redis事务中命令之所以会失败,是由于错误的编程所造成,通过事务回滚是不能回避这个根本问题。 NOTE: Redis事务中命令执行失败,仍会继续执行后面的执行,在没有特殊干预前提下,直到执行完队列中所有指令为止。 3、使用事务可能遇到的问题 A、事务在执行 EXEC 之前,入队的命令可能会出错,举个例子:命令可能会产生语法错误(参数数量错误,参数名错误等),或者其他更严重的错误,比如内存不足(如果服务器使用maxmemory 设置了最大内存限制的话)。 B、事务在执行 EXEC 之前,举个例子:事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面等。 对于发生在 EXEC 执行之前的错误,客户端以前的做法是检查命令入队所得的返回值:如果命令入队时返回QUEUED ,那么入队成功;否则,就是入队失败。如果有命令在入队时失败,那么大部分客户端都会停止并取消这个事务。 从 Redis 2.6.5 开始,服务器会对命令入队失败的情况进行记录,并在客户端调用 EXEC 命令时,拒绝执行并自动放弃这个事务。 在 Redis 2.6.5 以前, Redis 只执行事务中那些入队成功的命令,而忽略那些入队失败的命令。而新的处理方式则使得在管道技术中包含事务变得简单,因为发送事务和读取事务的回复都只需要和服务器进行一次通讯即可。 至于那些在 EXEC 命令执行之后所产生的错误,并没有对它们进行特别处理: 即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行。 五、例子演示 connect('127.0.0.1',6379); $result = array(); // 开启事务 $redis->multi(); // 添加指令到队列 $redis->set('book-name','Thinking in PHP!'); $redis->sAdd('tags','PHP','Programming','Thinking'); $bookname = $redis->get('book-name'); $tags = $redis->sMembers('tags'); // 执行事务 $redis->exec(); // 显示结果 echo '书名:'.$bookname.' 标签:'.$tags; ?> 结果: 答案来源于网络

问问小秘 2019-12-02 03:02:33 0 浏览量 回答数 0

问题

怎么设计一个轻量的用户autocomplete系统

爵霸 2019-12-01 20:11:18 1121 浏览量 回答数 1

回答

有必要; Redis事务使用总结: Redis的事务机制允许同时执行多条指令,它是原子性操作,事务中的命令要么全部执行,要么全部不执行,另外,事务中的所有指令都会被序列化,而且其开始执行过程中,不回被即时过来的指令所打断,其需要经历三个过程,分别为开始事务、命令入队以及执行事务。 ·     相关命令 ·     如何使用 ·     脚本事务 ·     遇到问题 ·     例子演示 一、相关命令 1、MULTI 该命令用来开启事务,它总是返回ok结果,当其执行之后,客户端可以继续发送任意条数量的指令,这些指令不会立即被执行,而是被放到了队列中,直到EXEC被调用之后,所有命令才会被序列化执行。 2、EXEC 该命令负责触发并执行队列中所有的命令。 NOTE: 如果MULTI开启之后,因为某些原因没有成功执行EXEC,那么事务中所有的命令都不会被执行的。 3、DISCARD 该命令用来刷新事务中所有排队等待执行的指令,它总是返回ok结果,并且将服务连接状态恢复到正常。如果已经使用WATCH,那么其会将释放所有被WATCH的key。 4、WATCH 标记所有指定的key被监控起来,使其在事务中有条件的执行(乐观锁)。 NOTE: A、WATCH使得EXEC命令需要有条件的执行,也就是事务只能在所有被监视的键没有被修改的前提下才能执行。另外,在EXEC被执行之后,所有的WATCH都会被取消。 B、UNWATCH手动取消对所有键的WATCH,如果执行了EXEC或者DISCARD,则不需要手动执行UNWATCH命令。 二、如何使用 Redis原生使用(Redis-cli): 127.0.0.1:6379> multi     // 事务开始的动作标志下面即为入队 OK 127.0.0.1:6379> set book-name "Thinking in Java" QUEUED 127.0.0.1:6379> get book-name QUEUED 127.0.0.1:6379> sadd tag "java" "Programming""Thinking" QUEUED 127.0.0.1:6379> smembers tag QUEUED 127.0.0.1:6379> exec     // 执行事务 1) OK 2) "Thinking in Java" 3) (integer) 3 4) 1) "Thinking" 2) "Programming" 3) "java" 127.0.0.1:6379> discard  // 事务已执行完毕 已经自动取消 (error) ERR DISCARD without MULTI 127.0.0.1:6379> multi OK 127.0.0.1:6379> set book-name "Patterns in Java" QUEUED 127.0.0.1:6379> get book-name QUEUED 127.0.0.1:6379> sadd tag "Java" "Thinking""Programming" QUEUED 127.0.0.1:6379> smembers tag QUEUED 127.0.0.1:6379> discard  // 事务未执行 可以刷新队列指令状态 取消执行 OK 127.0.0.1:6379> exec     // 事务已经被取消不能再执行 (error) ERR EXEC without MULTI 三、脚本事务 Redis 2.6开始支持了脚本,而该脚本本身就是一种事务机制,所以任何在事务里可以完成的事,在脚本里面也能完成,并且使用脚本更简单些,并且速度也更快。不过因为事务提供了一种即使不使用脚本,也可以避免竞争条件的方法,并且事务本身的实现并不复杂,所以现在的使用也比较多,但不排除日后可能被替代或是占据主要地位的可能。 NOTE: Redis为什么引入两种处理事务的方式?脚本功能是 Redis 2.6 才引入的,而事务功能则在更早之前就存在,所以 Redis 才会同时存在两种处理事务的方法。另外,事务脚本会在后续文章中总结介绍。 四、遇到问题 1、乐观锁实现 举个例子,假设我们需要原子性为某个键加1操作(假设INCR不存在),那么应该是这样的执行语句: SET mykey 1 val = GET mykey val = val + 1 SET mykey ${val} 单个客户端访问操作没有任何问题,如果是多个客户端同时访问mykey,就会产生资源共享访问问题,比如:现在有个两个客户端访问同一个键mykey,那么mykey的可能是2,但是我们期望的值应该是3才对,这个类似于高并发下的sync锁机制,所以我们需要使用WATCH来监控被共享的键mykey,如下: WATCH mykey(可监控多个键) val = GET mykey val = val + 1 MULTI SET mykey ${val} EXEC NOTE: 虽然大多情况下,多个客户端访问操作同一个键的情况很少或没有,但是不能排除这个特殊情况,所以建议在有可能产生键共享的指令中使用WATCH在EXEC执行前对其监管。 2、Redis不支持回滚(Roll Back) Redis的事务不支持回滚,这点不同于关系数据库中的事务,所以它的内部保持了简单且快速的特点。另外,Redis不支持回滚是这样考虑的:Redis事务中命令之所以会失败,是由于错误的编程所造成,通过事务回滚是不能回避这个根本问题。 NOTE: Redis事务中命令执行失败,仍会继续执行后面的执行,在没有特殊干预前提下,直到执行完队列中所有指令为止。 3、使用事务可能遇到的问题 A、事务在执行 EXEC 之前,入队的命令可能会出错,举个例子:命令可能会产生语法错误(参数数量错误,参数名错误等),或者其他更严重的错误,比如内存不足(如果服务器使用maxmemory 设置了最大内存限制的话)。 B、事务在执行 EXEC 之前,举个例子:事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面等。 对于发生在 EXEC 执行之前的错误,客户端以前的做法是检查命令入队所得的返回值:如果命令入队时返回QUEUED ,那么入队成功;否则,就是入队失败。如果有命令在入队时失败,那么大部分客户端都会停止并取消这个事务。 从 Redis 2.6.5 开始,服务器会对命令入队失败的情况进行记录,并在客户端调用 EXEC 命令时,拒绝执行并自动放弃这个事务。 在 Redis 2.6.5 以前, Redis 只执行事务中那些入队成功的命令,而忽略那些入队失败的命令。而新的处理方式则使得在管道技术中包含事务变得简单,因为发送事务和读取事务的回复都只需要和服务器进行一次通讯即可。 至于那些在 EXEC 命令执行之后所产生的错误,并没有对它们进行特别处理: 即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行。 五、例子演示 <?php $redis = new \Redis(); $redis->connect('127.0.0.1',6379); $result = array(); // 开启事务 $redis->multi(); // 添加指令到队列 $redis->set('book-name','Thinking in PHP!'); $redis->sAdd('tags','PHP','Programming','Thinking'); $bookname = $redis->get('book-name'); $tags = $redis->sMembers('tags'); // 执行事务 $redis->exec(); // 显示结果 echo '书名:'.$bookname.' 标签:'.$tags; ?> 结果:   答案来源于网络

养狐狸的猫 2019-12-02 02:14:26 0 浏览量 回答数 0

问题

数据库防脚本注入

elinks 2019-12-01 21:14:33 6119 浏览量 回答数 0

回答

a. 内部进行配置,连接Redis b.去重规则通过redis的集合完成,集合的Key为: key = defaults.DUPEFILTER_KEY % {'timestamp': int(time.time())} 默认配置: DUPEFILTER_KEY = 'dupefilter:%(timestamp)s' c.去重规则中将url转换成唯一标示,然后在redis中检查是否已经在集合中存在 from scrapy.utils import request from scrapy.http import Request req = Request(url='http://www.cnblogs.com/wupeiqi.html') result = request.request_fingerprint(req) print(result) # 8ea4fd67887449313ccc12e5b6b92510cc53675c scrapy和scrapy-redis的去重规则(源码) 1. scrapy中去重规则是如何实现? class RFPDupeFilter(BaseDupeFilter): """Request Fingerprint duplicates filter""" def __init__(self, path=None, debug=False): self.fingerprints = set() @classmethod def from_settings(cls, settings): debug = settings.getbool('DUPEFILTER_DEBUG') return cls(job_dir(settings), debug) def request_seen(self, request): # 将request对象转换成唯一标识。 fp = self.request_fingerprint(request) # 判断在集合中是否存在,如果存在则返回True,表示已经访问过。 if fp in self.fingerprints: return True # 之前未访问过,将url添加到访问记录中。 self.fingerprints.add(fp) def request_fingerprint(self, request): return request_fingerprint(request) 2. scrapy-redis中去重规则是如何实现? class RFPDupeFilter(BaseDupeFilter): """Redis-based request duplicates filter. This class can also be used with default Scrapy's scheduler. """ logger = logger def __init__(self, server, key, debug=False): # self.server = redis连接 self.server = server # self.key = dupefilter:123912873234 self.key = key @classmethod def from_settings(cls, settings): # 读取配置,连接redis server = get_redis_from_settings(settings) # key = dupefilter:123912873234 key = defaults.DUPEFILTER_KEY % {'timestamp': int(time.time())} debug = settings.getbool('DUPEFILTER_DEBUG') return cls(server, key=key, debug=debug) @classmethod def from_crawler(cls, crawler): return cls.from_settings(crawler.settings) def request_seen(self, request): fp = self.request_fingerprint(request) # This returns the number of values added, zero if already exists. # self.server=redis连接 # 添加到redis集合中:1,添加工程;0,已经存在 added = self.server.sadd(self.key, fp) return added == 0 def request_fingerprint(self, request): return request_fingerprint(request) def close(self, reason=''): self.clear() def clear(self): """Clears fingerprints data.""" self.server.delete(self.key)

珍宝珠 2019-12-02 03:20:39 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 云数据库 Redis 版兼容 Redis 3.0 版本,支持 Redis 3.0 的 Geo 命令。目前还有小部分暂未开放的命令和受限制的命令。 支持的命令操作 Keys(键) String(字符串) Hash(哈希表) List(列表) Set(集合) SortedSet(有序集合) DEL APPEND HDEL BLPOP SADD ZADD DUMP BITCOUNT HEXISTS BRPOP SCARD ZCARD EXISTS BITOP HGET BRPOPLPUSH SDIFF ZCOUNT EXPIRE BITPOS HGETALL LINDEX SDIFFSTORE ZINCRBY EXPIREAT DECR HINCRBY LINSERT SINTER ZRANGE MOVE DECRBY HINCRBYFLOAT LLEN SINTERSTORE ZRANGEBYSCORE PERSIST GET HKEYS LPOP SISMEMBER ZRANK PEXPIRE GETBIT HLEN LPUSH SMEMBERS ZREM PEXPTREAT GETRANGE HMGET LPUSHX SMOVE ZREMRANGEBYRANK PTTL GETSET HMSET LRANGE SPOP ZREMRANGEBYSCORE RANDOMKEY INCR HSET LREM SRANDMEMBER ZREVRANGE RENAME INCRBY HSETNX LSET SREM ZREVRANGEBYSCORE RENAMENX INCRBYFLOAT HVALS LTRIM SUNION ZREVRANK RESTORE MGET HSCAN RPOP SUNIONSTORE ZSCORE SORT MSET RPOPLPUSH SSCAN ZUNIONSTORE TTL MSETNX RPUSH ZINTERSTORE TYPE PSETEX RPUSHX ZSCAN SCAN SET ZRANGEBYLEX OBJECT SETBIT ZLEXCOUNT SETEX ZREMRANGEBYLEX SETNX SETRANGE STRLEN 以及 HyperLogLog Pub/Sub(发布/订阅) Transaction(事务) Connection(连接) Server(服务器) Scripting(脚本) Geo(地理位置) PFADD PSUBSCRIBE DISCARD AUTH FLUSHALL EVAL GEOADD PFCOUNT PUBLISH EXEC ECHO FLUSHDB EVALSHA GEOHASH PFMERGE PUBSUB MULTI PING DBSIZE SCRIPT EXISTS GEOPOS PUNSUBSCRIBE UNWATCH QUIT TIME SCRIPT FLUSH GEODIST SUBSCRIBE WATCH SELECT INFO SCRIPT KILL GEORADIUS UNSUBSCRIBE KEYS SCRIPT LOAD GEORADIUSBYMEMBER CLIENT KILL CLIENT LIST CLIENT GETNAME CLIENT SETNAME CONFIG GET MONITOR SLOWLOG 说明 集群实例下,client list 命令列出所有连接到该 proxy 的 user connection。其中,id、age、idle、addr、fd、name、db、multi、omem、cmd 字段和redis内核表达的意思一样。sub、psub 在 proxy 层没有区分,要么都为1,要么都为0。qbuf、qbuf-free、obl、oll 字段目前没有意义。 集群实例下,client kill 命令目前支持两种形式:client kill ip:port和client kill addr ip:port。 暂未开放的命令 Keys(键) Server(服务器) MIGRATE BGREWRITEAOF BGSAVE CONFIG REWRITE CONFIG SET CONFIG RESETSTAT COMMAND COMMAND COUNT COMMAND GETKEYS COMMAND INFO DEBUG OBJECT DEBUG SEGFAULT LASTSAVE ROLE SAVE SHUTDOWN SLAVEOF SYNC 集群实例受限制的命令 Keys Strings Lists HyperLogLog Transaction Scripting RENAME MSETNX RPOPLPUSH PFMERGE DISCARD EVAL RENAMENX BRPOP PFCOUNT EXEC EVALSHA SORT BLPOP MULTI SCRIPT EXISTS BRPOPLPUSH UNWATCH SCRIPT FLUSH WATCH SCRIPT KILL SCRIPT LOAD 说明 集群实例受限命令只支持所操作 key 均分布在单个 hash slot 中的场景,没有实现多个 hash slot 数据的合并功能,因此需要用 hash tag 的方式确保要操作的 key 均分布在一个 hash slot 中。 比如有 key1,aakey,abkey3,那么我们在存储的时候需要用 {key}1,aa{key},ab{key}3 的方式存储,这样调用受限命令时才能生效。具体关于 hash tag 的用法请参见 Redis 官方文档:http://redis.io/topics/cluster-spec。 事务之前没有使用 watch 命令且事务中都是单 key 的命令场景,不再要求所有 key 必须在同一个 slot 中,使用方式和直连 redis 完全一致。其他场景要求事务中所有命令的所有 key 必须在同一个 slot 中。 多 key 命令包括:DEL、SORT、MGET、MSET、BITOP、EXISTS、MSETNX、RENAME、 RENAMENX、BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH、SMOVE、SUNION、SINTER、SDIFF、SUNIONSTORE、SINTERSTORE、SDIFFSTORE、ZUNIONSTORE、ZINTERSTORE、 PFMERGE、PFCOUNT。 不允许在事务中使用的命令包括:WATCH、UNWATCH、RANDOMKEY、KEYS、SUBSCRIBE、 UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE、PUBLISH、PUBSUB、SCRIPT、EVAL、 EVALSHA、SCAN、ISCAN、DBSIZE、ADMINAUTH、AUTH、PING、ECHO、FLUSHDB、 FLUSHALL、MONITOR、IMONITOR、RIMONITOR、INFO、IINFO、RIINFO、CONFIG、 SLOWLOG、TIME、CLIENT。 Lua使用限制 Lua 脚本放开限制,标准版-双节点、标准版-单节点支持用户直接调用。 集群版本条件性支持: 所有key都应该由 KEYS 数组来传递,redis.call/pcall 中调用的redis命令,key的位置必须是KEYS array(不能使用Lua变量替换KEYS),否则直接返回错误信息,"-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array\r\n"。 所有key必须在1个slot上,否则返回错误信息,"-ERR eval/evalsha command keys must be in same slot\r\n"。 调用必须要带有key,否则直接返回错误信息, "-ERR for redis cluster, eval/evalsha number of keys can't be negative or zero\r\n"。 自研的集群实例命令 info key 命令:查询 key 所属的 slot 和 db。Redis 原生的 info 命令中最多可以带一个可选的 section (info [section])。目前云数据库 Redis 版的集群实例,部分命令限制所有 key 必须在同一个 slot 中,info key 命令方便用户查询某些 key 是否在同一个 slot 或 db 节点中。用法如下: 127.0.0.1:6379> info key test_key slot:15118 node_index:0 注意 线上旧版本可能出现 info key 显示出来的 node index 和实例拓扑图的 node index 不一致,最新版本已经修复。 info key 显示的 node 是指集群规格下后端的物理节点,和 select 命令中的 db 不是同一个概念。 iinfo 命令:用法类似于 info,用于在指定的 Redis 节点上执行 info 命令。用法如下: iinfo db_idx [section] 其中,db_idx 的范围是[0, nodecount],nodecount 可以通过 info 命令获取,section 为 info 官方一致的值。要了解某个 Redis 节点的 info 可以使用 iinfo 命令或者从控制台上查看实例拓扑图,详情请参见 如何查看 Redis 集群子实例内存。 riinfo 命令:和 iinfo 命令类似,但只能在读写分离的模式下使用。用法中增加了一个 readonly slave 的 idx,用于指定在第几个 readonly slave 上执行 info 命令。在读写分离集群中可以用来在指定 readonly slave 上执行 info 命令。如果在非读写分离集群中使用,会返回错误。用法如下: riinfo db_idx ro_slave_idx [section] iscan 命令:在集群模式下可以在指定的 db 节点上执行 scan 命令。在 scan 命令的基础上扩展了一个参数用于指定 db_idx, db_idx 的范围是[0, nodecount],nodecount 可以通过 info 命令获取或者从控制台上查看实例拓扑图。用法如下: iscan db_idx cursor [MATCH pattern] [COUNT count] imonitor 命令:和 iinfo, iscan 类似,在 monitor 的基础上新增一个参数指定 monitor 执行的 db_idx,db_idx 的范围是[0, nodecount), nodecount 可以通过 info 命令获取或者从控制台上查看实例拓扑图。用法如下: imonitor db_idx rimonitor 命令:和 riinfo 类似,用于读写分离场景下,在指定的 shard 里的指定只读从库上执行 monitor 命令。用法如下: rimonitor db_idx ro_slave_idx 说明 关于 Redis 命令的详细信息,请参见 官方文档。 云数据库 Redis 版集群实例最新的命令支持详情,请参见 云栖社区说明。

2019-12-01 23:09:35 0 浏览量 回答数 0

问题

centos6.5 安装PHPredis扩张,make出现错误

蛮大人123 2019-12-01 19:47:56 2604 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅