转自:https://segmentfault.com/a/1190000002870317
import java.util.List; import java.util.Map; import java.util.Set; /** * Common interface for sharded and non-sharded Jedis */ public interface JedisCommands { /** * 存储数据到缓存中,若key已存在则覆盖 value的长度不能超过1073741824 bytes (1 GB) * * @param key * @param value * @return */ String set(String key, String value); /** * 存储数据到缓存中,并制定过期时间和当Key存在时是否覆盖。 * * @param key * @param value * @param nxxx * nxxx的值只能取NX或者XX,如果取NX,则只有当key不存在是才进行set,如果取XX,则只有当key已经存在时才进行set * * @param expx expx的值只能取EX或者PX,代表数据过期时间的单位,EX代表秒,PX代表毫秒。 * @param time 过期时间,单位是expx所代表的单位。 * @return */ String set(String key, String value, String nxxx, String expx, long time); /** * 从缓存中根据key取得其String类型的值,如果key不存在则返回null,如果key存在但value不是string类型的, * 则返回一个error。这个方法只能从缓存中取得value为string类型的值。 * * @param key * @return */ String get(String key); /** * 检查某个key是否在缓存中存在,如果存在返回true,否则返回false;需要注意的是,即使该key所对应的value是一个空字符串, * 也依然会返回true。 * * @param key * @return */ Boolean exists(String key); /** * * 如果一个key设置了过期时间,则取消其过期时间,使其永久存在。 * * @param key * @return 返回1或者0,1代表取消过期时间成功,0代表不成功(只有当key不存在时这种情况才会发生) */ Long persist(String key); /** * 返回某个key所存储的数据类型,返回的数据类型有可能是"none", "string", "list", "set", "zset", * "hash". "none"代表key不存在。 * * @param key * @return */ String type(String key); /** * 为key设置一个特定的过期时间,单位为秒。过期时间一到,redis将会从缓存中删除掉该key。 * 即使是有过期时间的key,redis也会在持久化时将其写到硬盘中,并把相对过期时间改为绝对的Unix过期时间。 * 在一个有设置过期时间的key上重复设置过期时间将会覆盖原先设置的过期时间。 * * @param key * @param seconds * @return 返回1表示成功设置过期时间,返回0表示key不存在。 */ Long expire(String key, int seconds); /** * 机制同{@link expire}一样,只是时间单位改为毫秒。 * * @param key * @param milliseconds * @return 返回值同 {@link expire}一样。 */ Long pexpire(String key, long milliseconds); /** * 与{@link expire}不一样,expireAt设置的时间不是能存活多久,而是固定的UNIX时间(从1970年开始算起),单位为秒。 * * @param key * @param unixTime * @return */ Long expireAt(String key, long unixTime); /** * 同{@link expireAt}机制相同,但单位为毫秒。 * * @param key * @param millisecondsTimestamp * @return */ Long pexpireAt(String key, long millisecondsTimestamp); /** * 返回一个key还能活多久,单位为秒 * * @param key * @return 如果该key本来并没有设置过期时间,则返回-1,如果该key不存在,则返回-2 */ Long ttl(String key); /** * 设置或者清除指定key的value上的某个位置的比特位,如果该key原先不存在,则新创建一个key,其value将会自动分配内存, * 直到可以放下指定位置的bit值。 * * @param key * @param offset * @param value true代表1,false代表0 * @return 返回原来位置的bit值是否是1,如果是1,则返回true,否则返回false。 */ Boolean setbit(String key, long offset, boolean value); /** * 设置或者清除指定key的value上的某个位置的比特位,如果该key原先不存在,则新创建一个key,其value将会自动分配内存, * 直到可以放下指定位置的bit值。 * * @param key * @param offset * @param value 只能是"1"或者"0" * @return 返回原来位置的bit值是否是1,如果是1,则返回true,否则返回false。 */ Boolean setbit(String key, long offset, String value); /** * 取得偏移量为offset的bit值。 * * @param key * @param offset * @return true代表1,false代表0 */ Boolean getbit(String key, long offset); /** * 这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。 * 如果offset比当前key对应string还要长, * 那这个string后面就补0以达到offset。不存在的keys被认为是空字符串,所以这个命令可以确保key有一个足够大的字符串 * 能在offset处设置value。 * * @param key * @param offset * @param value * @return 该命令修改后的字符串长度 */ Long setrange(String key, long offset, String value); /** * 获得start - end之间的子字符串,若偏移量为负数,代表从末尾开始计算,例如-1代表倒数第一个,-2代表倒数第二个 * * @param key * @param startOffset * @param endOffset * @return */ String getrange(String key, long startOffset, long endOffset); /** * 自动将key对应到value并且返回原来key对应的value。如果key存在但是对应的value不是字符串,就返回错误。 * * @param key * @param value * @return */ String getSet(String key, String value); /** * 参考 {@link set(String key, String value, String nxxx, String expx, long * time)} * * @param key * @param value * @return */ Long setnx(String key, String value); /** * 参考 {@link set(String key, String value, String nxxx, String expx, long * time)} * * @param key * @param seconds * @param value * @return */ String setex(String key, int seconds, String value); /** * 将指定key的值减少某个值 * * @param key * @param integer * @return 返回减少后的新值 */ Long decrBy(String key, long integer); /** * 将指定Key的值减少1 * * @param key * @return 返回减少后的新值 */ Long decr(String key); /** * 将指定的key的值增加指定的值 * * @param key * @param integer * @return 返回增加后的新值 */ Long incrBy(String key, long integer); /** * 将指定的key的值增加指定的值(浮点数) * * @param key * @param value * @return 返回增加后的新值 */ Double incrByFloat(String key, double value); /** * 将指定的key的值增加1 * * @param key * @return 返回增加后的新值 */ Long incr(String key); /** * 若key存在,将value追加到原有字符串的末尾。若key不存在,则创建一个新的空字符串。 * * @param key * @param value * @return 返回字符串的总长度 */ Long append(String key, String value); /** * 返回start - end 之间的子字符串(start 和 end处的字符也包括在内) * * @param key * @param start * @param end * @return 返回子字符串 */ String substr(String key, int start, int end); /** * 设置hash表里field字段的值为value。如果key不存在,则创建一个新的hash表 * * @param key * @param field * @param value * @return 如果该字段已经存在,那么将会更新该字段的值,返回0.如果字段不存在,则新创建一个并且返回1. */ Long hset(String key, String field, String value); /** * 如果该key对应的值是一个Hash表,则返回对应字段的值。 如果不存在该字段,或者key不存在,则返回一个"nil"值。 * * @param key * @param field * @return */ String hget(String key, String field); /** * 当字段不存在时,才进行set。 * * @param key * @param field * @param value * @return 如果该字段已经存在,则返回0.若字段不存在,则创建后set,返回1. */ Long hsetnx(String key, String field, String value); /** * 设置多个字段和值,如果字段存在,则覆盖。 * * @param key * @param hash * @return 设置成功返回OK,设置不成功则返回EXCEPTION */ String hmset(String key, Map<String, String> hash); /** * 在hash中获取多个字段的值,若字段不存在,则其值为nil。 * * @param key * @param fields * @return 按顺序返回多个字段的值。 */ List<String> hmget(String key, String... fields); /** * 对hash中指定字段的值增加指定的值 * * @param key * @param field * @param value * @return 返回增加后的新值 */ Long hincrBy(String key, String field, long value); /** * 判断hash中指定字段是否存在 * * @param key * @param field * @return 若存在返回1,若不存在返回0 */ Boolean hexists(String key, String field); /** * 删除hash中指定字段 * * @param key * @param field * @return 删除成功返回1, 删除不成功返回0 */ Long hdel(String key, String... field); /** * 返回 key 指定的哈希集包含的字段的数量 * * @param key * @return 哈希集中字段的数量,当 key 指定的哈希集不存在时返回 0 */ Long hlen(String key); /** * 返回 key 指定的哈希集中所有字段的名字。 * * @param key * @return 哈希集中的字段列表,当 key 指定的哈希集不存在时返回空列表。 */ Set<String> hkeys(String key); /** * 返回 key 指定的哈希集中所有字段的值。 * * @param key * @return 哈希集中的值的列表,当 key 指定的哈希集不存在时返回空列表。 */ List<String> hvals(String key); /** * 返回 key 指定的哈希集中所有的字段和值 * * @param key * @return 返回 key 指定的哈希集中所有的字段和值,若key不存在返回空map。 */ Map<String, String> hgetAll(String key); /** * 向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key * 保存的不是一个列表,那么会返回一个错误。 * * 可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a * b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c。 * * @param key * @param string * @return 在 push 操作后的列表长度。 */ Long rpush(String key, String... string); /** * 将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key * 对应的值不是一个 list 的话,那么会返回一个错误。 * * 可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素是从最左端的到最右端的、一个接一个被插入到 list * 的头部。 所以对于这个命令例子 LPUSH mylist a b c,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素。 * * @param key * @param string * @return 在 push 操作后的列表长度。 */ Long lpush(String key, String... string); /** * 返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key * 里的值不是一个list的话,会返回error。 * * @param key * @return key对应的list的长度。 */ Long llen(String key); /** * 返回存储在 key 的列表里指定范围内的元素。 start 和 end * 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。 * * 偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。 * * @param key * @param start * @param end * @return 指定范围里的列表元素。 */ List<String> lrange(String key, long start, long end); /** * 修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 * 是列表里的第一个元素(表头),1 是第二个元素,以此类推。 * * @param key * @param start * @param end * @return */ String ltrim(String key, long start, long end); /** * 返回列表里的元素的索引 index 存储在 key 里面。 下标是从0开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 * 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。 * * 当 key 位置的值不是一个列表的时候,会返回一个error。 * * @param key * @param index * @return 请求的对应元素,或者当 index 超过范围的时候返回 nil。 */ String lindex(String key, long index); /** * 设置 index 位置的list元素的值为 value。 * * 当index超出范围时会返回一个error。 * * @param key * @param index * @param value * @return 状态恢复 */ String lset(String key, long index, String value); /** * 从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作: * * count > 0: 从头往尾移除值为 value 的元素。 count < 0: 从尾往头移除值为 value 的元素。 count = 0: * 移除所有值为 value 的元素。 * * 比如, LREM list -2 "hello" 会从存于 list 的列表里移除最后两个出现的 "hello"。 * * 需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。 * * @param key * @param count * @param value * @return 返回删除的个数 */ Long lrem(String key, long count, String value); /** * 移除并且返回 key 对应的 list 的第一个元素。 * * @param key * @return 返回第一个元素的值,或者当 key 不存在时返回 nil。 */ String lpop(String key); /** * 移除并返回存于 key 的 list 的最后一个元素。 * * @param key * @return 最后一个元素的值,或者当 key 不存在的时候返回 nil。 */ String rpop(String key); /** * 添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key * 不存在,则新建集合key,并添加member元素到集合key中. * * 如果key 的类型不是集合则返回错误. * * @param key * @param member * @return 返回新成功添加到集合里元素的数量,不包括已经存在于集合中的元素. */ Long sadd(String key, String... member); /** * 返回key集合所有的元素. * * 该命令的作用与使用一个参数的SINTER 命令作用相同. * * @param key * @return 集合中的所有元素. */ Set<String> smembers(String key); /** * 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0. * * 如果key的类型不是一个集合,则返回错误. * * @param key * @param member * @return 从集合中移除元素的个数,不包括不存在的成员. */ Long srem(String key, String... member); /** * 移除并返回一个集合中的随机元素 * * 该命令与 SRANDMEMBER相似,不同的是srandmember命令返回一个随机元素但是不移除. * * @param key * @return 被移除的元素, 当key不存在的时候返回 nil . */ String spop(String key); /** * 移除并返回多个集合中的随机元素 * * @param key * @param count * @return 被移除的元素, 当key不存在的时候值为 nil . */ Set<String> spop(String key, long count); /** * 返回集合存储的key的基数 (集合元素的数量). * * @param key * @return 集合的基数(元素的数量),如果key不存在,则返回 0. */ Long scard(String key); /** * 返回成员 member 是否是存储的集合 key的成员. * * @param key * @param member * @return 如果member元素是集合key的成员,则返回1.如果member元素不是key的成员,或者集合key不存在,则返回0 */ Boolean sismember(String key, String member); /** * 仅提供key参数,那么随机返回key集合中的一个元素.该命令作用类似于SPOP命令, 不同的是SPOP命令会将被选择的随机元素从集合中移除, * 而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作. * * @param key * @return 返回随机的元素,如果key不存在则返回nil */ String srandmember(String key); /** * 如果count是整数且小于元素的个数,返回含有 count * 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素 * ,当count是负数,则会返回一个包含count的绝对值的个数元素的数组 * ,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况. * * @param key * @param count * @return 返回一个随机的元素数组,如果key不存在则返回一个空的数组. */ List<String> srandmember(String key, int count); /** * 返回key的string类型value的长度。如果key对应的非string类型,就返回错误。 * * @param key * @return key对应的字符串value的长度,或者0(key不存在) */ Long strlen(String key); /** * 该命令添加指定的成员到key对应的有序集合中,每个成员都有一个分数。你可以指定多个分数/成员组合。如果一个指定的成员已经在对应的有序集合中了, * 那么其分数就会被更新成最新的 * ,并且该成员会重新调整到正确的位置,以确保集合有序。如果key不存在,就会创建一个含有这些成员的有序集合,就好像往一个空的集合中添加一样 * 。如果key存在,但是它并不是一个有序集合,那么就返回一个错误。 * * 分数的值必须是一个表示数字的字符串,并且可以是double类型的浮点数。 * * @param key * @param score * @param member * @return 返回添加到有序集合中元素的个数,不包括那种已经存在只是更新分数的元素。 */ Long zadd(String key, double score, String member); /** * 该命令添加指定的成员到key对应的有序集合中,每个成员都有一个分数。你可以指定多个分数/成员组合。如果一个指定的成员已经在对应的有序集合中了, * 那么其分数就会被更新成最新的 * ,并且该成员会重新调整到正确的位置,以确保集合有序。如果key不存在,就会创建一个含有这些成员的有序集合,就好像往一个空的集合中添加一样 * 。如果key存在,但是它并不是一个有序集合,那么就返回一个错误。 * * 分数的值必须是一个表示数字的字符串,并且可以是double类型的浮点数。 * * @param key * @param scoreMembers * @return 返回添加到有序集合中元素的个数,不包括那种已经存在只是更新分数的元素。 */ Long zadd(String key, Map<String, Double> scoreMembers); /** * 返回有序集key中,指定区间内的成员。其中成员按score值递增(从小到大)来排序。具有相同score值的成员按字典序来排列。 * * 如果你需要成员按score值递减(score相等时按字典序递减)来排列,请使用ZREVRANGE命令。 * 下标参数start和stop都以0为底,也就是说,以0表示有序集第一个成员,以1表示有序集第二个成员,以此类推。 * 你也可以使用负数下标,以-1表示最后一个成员,-2表示倒数第二个成员,以此类推。 * * 超出范围的下标并不会引起错误。如果start的值比有序集的最大下标还要大,或是start > * stop时,ZRANGE命令只是简单地返回一个空列表。 * 另一方面,假如stop参数的值比有序集的最大下标还要大,那么Redis将stop当作最大下标来处理。 * * @param key * @param start * @param end * @return 指定范围的元素列表 */ Set<String> zrange(String key, long start, long end); /** * 从集合中删除指定member元素,当key存在,但是其不是有序集合类型,就返回一个错误。 * * @param key * @param member * @return 返回的是从有序集合中删除的成员个数,不包括不存在的成员。 */ Long zrem(String key, String... member); /** * 为有序集key的成员member的score值加上增量increment。如果key中不存在member,就在key中添加一个member, * score是increment(就好像它之前的score是0.0)。如果key不存在,就创建一个只含有指定member成员的有序集合。 * * 当key不是有序集类型时,返回一个错误。 * * score值必须整数值或双精度浮点数。也有可能给一个负数来减少score的值。 * * @param key * @param score * @param member * @return member成员的新score值. */ Double zincrby(String key, double score, String member); /** * 返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列。排名以0为底,也就是说, * score值最小的成员排名为0。 * * 使用ZREVRANK命令可以获得成员按score值递减(从大到小)排列的排名。 * * @param key * @param member * @return 如果member是有序集key的成员,返回member的排名的整数。 如果member不是有序集key的成员,返回 nil。 */ Long zrank(String key, String member); /** * 返回有序集key中成员member的排名,其中有序集成员按score值从大到小排列。排名以0为底,也就是说,score值最大的成员排名为0。 * * 使用ZRANK命令可以获得成员按score值递增(从小到大)排列的排名。 * * @param key * @param member * @return 如果member是有序集key的成员,返回member的排名。整型数字。 如果member不是有序集key的成员,返回Bulk * reply: nil. */ Long zrevrank(String key, String member); /** * 返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。具有相同score值的成员按字典序的反序排列。 * 除了成员按score值递减的次序排列这一点外,ZREVRANGE命令的其他方面和ZRANGE命令一样。 * * @param key * @param start * @param end * @return 指定范围的元素列表(可选是否含有分数)。 */ Set<String> zrevrange(String key, long start, long end); /** * 返回有序集key中,指定区间内的成员。其中成员按score值递增(从小到大)来排序。具有相同score值的成员按字典序来排列。 * * 如果你需要成员按score值递减(score相等时按字典序递减)来排列,请使用ZREVRANGE命令。 * 下标参数start和stop都以0为底,也就是说,以0表示有序集第一个成员,以1表示有序集第二个成员,以此类推。 * 你也可以使用负数下标,以-1表示最后一个成员,-2表示倒数第二个成员,以此类推。 * * 超出范围的下标并不会引起错误。如果start的值比有序集的最大下标还要大,或是start > * stop时,ZRANGE命令只是简单地返回一个空列表。 * 另一方面,假如stop参数的值比有序集的最大下标还要大,那么Redis将stop当作最大下标来处理。 * * 使用WITHSCORES选项,来让成员和它的score值一并返回,返回列表以value1,score1, ..., * valueN,scoreN的格式表示,而不是value1,...,valueN。客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。 * * @param key * @param start * @param end * @return 指定范围的元素列表(以元组集合的形式)。 */ Set<Tuple> zrangeWithScores(String key, long start, long end); /** * 返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。具有相同score值的成员按字典序的反序排列。 * 除了成员按score值递减的次序排列这一点外,ZREVRANGE命令的其他方面和ZRANGE命令一样。 * * @param key * @param start * @param end * @return 指定范围的元素列表(可选是否含有分数)。 */ Set<Tuple> zrevrangeWithScores(String key, long start, long end); /** * 返回key的有序集元素个数。 * * @param key * @return key存在的时候,返回有序集的元素个数,否则返回0。 */ Long zcard(String key); /** * 返回有序集key中,成员member的score值。 * * 如果member元素不是有序集key的成员,或key不存在,返回nil。 * * @param key * @param member * @return member成员的score值(double型浮点数) */ Double zscore(String key, String member); /** * 对一个集合或者一个列表排序 * * 对集合,有序集合,或者列表的value进行排序。默认情况下排序只对数字排序,双精度浮点数。 * * @see #sort(String, String) * @see #sort(String, SortingParams) * @see #sort(String, SortingParams, String) * @param key * @return 假设集合或列表包含的是数字元素,那么返回的将会是从小到大排列的一个列表。 */ List<String> sort(String key); /** * 根据指定参数来对列表或集合进行排序. * <p> * <b>examples:</b> * <p> * 一下是一些例子列表或者key-value: * * <pre> * x = [1, 2, 3] * y = [a, b, c] * * k1 = z * k2 = y * k3 = x * * w1 = 9 * w2 = 8 * w3 = 7 * </pre> * * 排序: * * <pre> * sort(x) or sort(x, sp.asc()) * -> [1, 2, 3] * * sort(x, sp.desc()) * -> [3, 2, 1] * * sort(y) * -> [c, a, b] * * sort(y, sp.alpha()) * -> [a, b, c] * * sort(y, sp.alpha().desc()) * -> [c, b, a] * </pre> * * Limit (e.g. for Pagination): * * <pre> * sort(x, sp.limit(0, 2)) * -> [1, 2] * * sort(y, sp.alpha().desc().limit(1, 2)) * -> [b, a] * </pre> * * 使用外部键来排序: * * <pre> * sort(x, sb.by(w*)) * -> [3, 2, 1] * * sort(x, sb.by(w*).desc()) * -> [1, 2, 3] * </pre> * * Getting external keys: * * <pre> * sort(x, sp.by(w*).get(k*)) * -> [x, y, z] * * sort(x, sp.by(w*).get(#).get(k*)) * -> [3, x, 2, y, 1, z] * </pre> * * @see #sort(String) * @see #sort(String, SortingParams, String) * @param key * @param sortingParameters * @return a list of sorted elements. */ List<String> sort(String key, SortingParams sortingParameters); /** * 返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。 * * @param key * @param min * @param max * @return 指定分数范围的元素个数。 */ Long zcount(String key, double min, double max); /** * 返回有序集key中,score值在min和max之间(默认包括score值等于min或max)的成员。 * * @param key * @param min * @param max * @return 指定分数范围的元素个数。 */ Long zcount(String key, String min, String max); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列 * * @param key * @param min * @param max * @return 指定分数范围的元素列表 */ Set<String> zrangeByScore(String key, double min, double max); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列 * * @param key * @param min * @param max * @return 指定分数范围的元素列表 */ Set<String> zrangeByScore(String key, String min, String max); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列, 指定返回结果的数量及区间。 * * @param key * @param min * @param max * @param offset * @param count * @return 指定分数范围的元素列表 */ Set<String> zrangeByScore(String key, double min, double max, int offset, int count); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列, 指定返回结果的数量及区间。 * * @param key * @param min * @param max * @param offset * @param count * @return 指定分数范围的元素列表 */ Set<String> zrangeByScore(String key, String min, String max, int offset, int count); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列。返回元素和其分数,而不只是元素。 * * @param key * @param min * @param max * @return */ Set<Tuple> zrangeByScoreWithScores(String key, double min, double max); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列, 指定返回结果的数量及区间。 返回元素和其分数,而不只是元素。 * * @param key * @param min * @param max * @param offset * @param count * @return */ Set<Tuple> zrangeByScoreWithScores(String key, double min, double max, int offset, int count); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列。返回元素和其分数,而不只是元素。 * * @param key * @param min * @param max * @return */ Set<Tuple> zrangeByScoreWithScores(String key, String min, String max); /** * 返回key的有序集合中的分数在min和max之间的所有元素(包括分数等于max或者min的元素)。元素被认为是从低分到高分排序的。 * 具有相同分数的元素按字典序排列, 指定返回结果的数量及区间。 返回元素和其分数,而不只是元素。 * * @param key * @param min * @param max * @param offset * @param count * @return */ Set<Tuple> zrangeByScoreWithScores(String key, String min, String max, int offset, int count); /** * 机制与zrangeByScore一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @return */ Set<String> zrevrangeByScore(String key, double max, double min); /** * 机制与zrangeByScore一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @return */ Set<String> zrevrangeByScore(String key, String max, String min); /** * 机制与zrangeByScore一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @param offset * @param count * @return */ Set<String> zrevrangeByScore(String key, double max, double min, int offset, int count); /** * 机制与zrangeByScoreWithScores一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @return */ Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min); /** * 机制与zrangeByScore一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @param offset * @param count * @return */ Set<String> zrevrangeByScore(String key, String max, String min, int offset, int count); /** * 机制与zrangeByScoreWithScores一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @return */ Set<Tuple> zrevrangeByScoreWithScores(String key, String max, String min); /** * 机制与zrangeByScoreWithScores一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @param offset * @param count * @return */ Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min, int offset, int count); /** * 机制与zrangeByScoreWithScores一样,只是返回结果为降序排序。 * * @param key * @param max * @param min * @param offset * @param count * @return */ Set<Tuple> zrevrangeByScoreWithScores(String key, String max, String min, int offset, int count); /** * 移除有序集key中,指定排名(rank)区间内的所有成员。下标参数start和stop都以0为底,0处是分数最小的那个元素。这些索引也可是负数, * 表示位移从最高分处开始数。例如,-1是分数最高的元素,-2是分数第二高的,依次类推。 * * @param key * @param start * @param end * @return 被移除成员的数量。 */ Long zremrangeByRank(String key, long start, long end); /** * 移除有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。 * * 自版本2.1.6开始,score值等于min或max的成员也可以不包括在内,语法请参见ZRANGEBYSCORE命令。 * * @param key * @param start * @param end * @return 删除的元素的个数 */ Long zremrangeByScore(String key, double start, double end); /** * 移除有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。 * * 自版本2.1.6开始,score值等于min或max的成员也可以不包括在内,语法请参见ZRANGEBYSCORE命令。 * * @param key * @param start * @param end * @return 删除的元素的个数 */ Long zremrangeByScore(String key, String start, String end); /** * 当插入到有序集合中的元素都具有相同的分数时,这个命令可以返回min和max指定范围内的元素的数量。 * * @param key * @param min * @param max * @return */ Long zlexcount(final String key, final String min, final String max); /** * 把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。 * * 当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。 * * 当 key 存在,但保存的不是一个list的时候,会返回error。 * * @param key * @param where * @param pivot 前或后 * @param value * @return 在 insert 操作后的 list 长度。 */ Long linsert(String key, Client.LIST_POSITION where, String pivot, String value); /** * 只有当 key 已经存在并且存着一个 list 的时候,在这个 key 下面的 list 的头部插入 value。 与 LPUSH 相反,当 * key 不存在的时候不会进行任何操作。 * * @param key * @param string * @return 在 push 操作后的 list 长度。 */ Long lpushx(String key, String... string); /** * 将值 value 插入到列表 key 的表尾, 当且仅当 key 存在并且是一个列表。 和 RPUSH 命令相反, 当 key * 不存在时,RPUSHX 命令什么也不做。 * * @param key * @param string * @return 在Push操作后List的长度 */ Long rpushx(String key, String... string); /** * @deprecated unusable command, this will be removed in 3.0.0. */ @Deprecated List<String> blpop(String arg); /** * BLPOP 是阻塞式列表的弹出原语。 它是命令 LPOP 的阻塞版本,这是因为当给定列表内没有任何元素可供弹出的时候, 连接将被 BLPOP * 命令阻塞。 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。 {@link http * ://www.redis.cn/commands/blpop.html} * * @param timeout * @param key * @return */ List<String> blpop(int timeout, String key); /** * @deprecated unusable command, this will be removed in 3.0.0. */ @Deprecated List<String> brpop(String arg); /** * BRPOP 是一个阻塞的列表弹出原语。 它是 RPOP 的阻塞版本,因为这个命令会在给定list无法弹出任何元素的时候阻塞连接。 * 该命令会按照给出的 key 顺序查看 list,并在找到的第一个非空 list 的尾部弹出一个元素。 * * 请在 BLPOP 文档 中查看该命令的准确语义,因为 BRPOP 和 BLPOP * 基本是完全一样的,除了它们一个是从尾部弹出元素,而另一个是从头部弹出元素。 {@link http * ://www.redis.cn/commands/brpop.html} * * * @param timeout * @param key * @return */ List<String> brpop(int timeout, String key); /** * 删除一个Key,如果删除的key不存在,则直接忽略。 * * @param key * @return 被删除的keys的数量 */ Long del(String key); /** * 回显 * * @param string * @return 回显输入的字符串 */ String echo(String string); /** * 将当前数据库的 key 移动到给定的数据库 db 当中。 * * 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。 * * 因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。 * * @param key * @param dbIndex * @return 移动成功返回 1 失败则返回 0 */ Long move(String key, int dbIndex); /** * 统计字符串的字节数 * * @param key * @return 字节数 */ Long bitcount(final String key); /** * 统计字符串指定起始位置的字节数 * * @param key * @param start * @param end * @return */ Long bitcount(final String key, long start, long end); /** * 迭代hash里面的元素 * * @param key * @param cursor * @return */ ScanResult<Map.Entry<String, String>> hscan(final String key, final String cursor); /** * 迭代set里面的元素 * * @param key * @param cursor * @return */ ScanResult<String> sscan(final String key, final String cursor); /** * 迭代zset里面的元素 * * @param key * @param cursor * @return */ ScanResult<Tuple> zscan(final String key, final String cursor); }
相关推荐
雷赛运动底层源码兼容性升级:品牌间无缝对接与高效运动性能保障,雷赛运动底层源码可交其他品牌正运动,固高源码 ,核心关键词:雷赛运动底层源码; 正运动品牌交换; 固高源码; 运动控制源码。,"雷赛与正运动固高源码互通,运动控制底层源码灵活可换"
MATLAB仿真及应用练习
C#工业互联网云服务器框架:高性能Web API与MQTT集成,带移动设备测试demo及多种协议支持(包括EF6+数据库扩展、无IIS依赖),c# 工业互联网云服务器框架。 集成web api服务,可选集成mqtt服务器及其它服务器,这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。 带手机app测试demo源码 具体具备功能如下: 1、具备EF6+mssql数据库功能,可更改为MYSQL或SQLITe. 2、自带WEB API服务,抛弃IIS支持。 用户可以通过WEB前端直接读取远程设备数据以及下发控制指令。 WEB API功能有服务器日志查询、WEB API接口认证用户管理、远端设备注册管理、服务器轮询读取任务启停、服务器参数设置、查询历史数据记录、下发指令到终端设备。 3、系统目前支持modbus 、modbus rtu协议,可定制开发集成Modbus TCp、西门子PLC S7协议、OPC协议、三菱PLC协议以及集成MQTT服务(以上协议在框架中没有集成,可以定制集成)。 4、系统自带MVC服务,开发API像平常使用的一样方便。 另外它自带硬件协议驱动。 5、与
80W高PF值可调电源方案:适用于LED驱动与笔记本充电,满足安规与EMC标准,附详细资料,80W可调高PF电源方案 高功率因数(高PF值) 符合安规要求,可过EMC家电标准。 主要应用于:LED驱动(无频闪),笔记本充电器。 等 输入100~。 输出可调。 资料: PCB文件(AD,99) 原理图 BOM单 散热片图纸 主副变压器图纸 ,核心关键词:可调高PF电源方案; 80W功率; 符合安规与EMC标准; LED驱动; 笔记本充电器; PCB文件; 原理图; BOM单; 散热片图纸; 主副变压器图纸。,"可调高功率因数电源方案:80W LED驱动与笔记本充电器必备"
锂电池管理系统中的选择性放电与可重构式均衡(旁路开关技术与均衡仿真),锂电池均衡仿真 电池管理系统 选择性放电 可重构式均衡(旁路开关) ,核心关键词:锂电池均衡仿真; 电池管理系统; 选择性放电; 可重构式均衡(旁路开关)。,"基于选择性放电策略的锂电池均衡仿真及可重构式均衡管理系统研究"
基于分层调度方法的分布式电动汽车协同调度算法研究——结合线性规划与二阶锥优化方法的MATLAB实现,分布式和电动汽车协同调度matlab 采用分层调度方法,采用线性规划和二阶锥方法实现分布式和电动汽车协同调度,程序运行稳定,有详细的参考资料 ,核心关键词:分布式; 电动汽车; 协同调度; MATLAB; 分层调度方法; 线性规划; 二阶锥方法; 程序稳定性; 详细参考资料。,基于Matlab的电动汽车与分布式系统协同调度策略:分层调度与优化算法
基于三菱PLC与组态王技术的鸡舍温湿度智能控制系统,基于三菱PLC和组态王鸡舍温湿度控制养鸡场 ,核心关键词:三菱PLC; 组态王; 鸡舍温湿度控制; 养鸡场。,基于三菱PLC与组态王鸡舍温湿度智能控制养鸡场方案
"某特种电机Maxwell与Simplorer联合仿真性能探究:波形分析揭示内在性能",某特种电机Maxwell+Simplorer联合仿真及其性能波形 ,核心关键词:Maxwell; Simplorer联合仿真; 特种电机; 性能波形;,"Maxwell与Simplorer联合仿真:特种电机性能波形解析"
智慧档案馆建设方案旨在通过先进的信息技术和智能化手段,全面提升档案管理的效率和安全性,满足现代档案管理的需求。方案涵盖了软件、硬件、网络及安全、分布式存储、数据保护、机房建设等多个方面,确保档案馆在数字化、智能化转型中具备高效、安全、可扩展的能力。 在软件部分,智慧档案馆平台集成了档案接收、管理、保存、智能库房管理、辅助鉴定、编研、统计、内部利用、电子阅览室智能服务等功能模块。通过智能化的档案接收和管理流程,系统能够高效处理各类档案数据,支持历史数据迁移、数字化成果接收、征集档案接收等操作。智能库房管理模块通过虚拟库房、调卷归卷管理、温湿度管理等功能,确保实体档案的安全保管和高效利用。此外,系统还提供了智能辅助鉴定、编研、统计等功能,帮助档案馆实现档案的智能化管理和利用。 硬件部分则包括网络及安全设备、分布式存储、数据保护一体机、离线备份设备、机房建设等。网络及安全设备如核心交换机、汇聚交换机、下一代防火墙、终端安全管理系统等,确保了档案馆网络的高效运行和数据的安全防护。分布式存储系统通过全分布式架构和数据冗余技术,提供了高可伸缩性和高可用性,支持多副本或EC冗余机制,确保数据的安全性和快速重构。数据保护一体机和离线备份设备则通过多种备份和恢复机制,确保数据的完整性和可恢复性。机房建设部分则通过UPS、精密配电柜、精密空调、冷通道机柜等设备,确保机房的稳定运行和高效管理。 智慧档案馆建设方案不仅顺应了国家档案信息化建设的政策要求,还结合了云计算、区块链等新技术,确保了系统的先进性和安全性。通过智能化的档案管理和高效的数据保护机制,档案馆能够更好地服务于公众,提升档案利用效率,实现档案资源的共建共享。这一方案不仅是档案数字化转型的重要举措,也为未来档案馆的智能化发展奠定了坚实基础。
基于dsp28335的CAN升级方案及自主开发BootLoader与上位机流程说明,基于dsp28335的can升级方案 bootloader、上位机等全部自主开发 文件说明: 1、setup为上位机安装文件; 2、V5为dsp28335的BootLoader源代码,我用的CCS10.3.1; 3、WindowsApplication3为VS平台的上位机源代码,我用的VS2013; 4、app.bin为测试用的app烧录固件。 5、F28335_FLASH_COM_V1为app代码参考的cmd文件。 使用ZLG的USBCAN-II。如果是别家的盒子,看他是否给了兼容周力功的方法,按照那个方法操作上位机就可以 操作流程: 1、先连接好CAN盒和DSP(不上电),打开上位机(默认的设置,不要修改任何选项)。 2、点击“连接”,再点击“启动”。 3、打开目标bin文件。 4、DSP上电,3S内电机“更新固件”。 5、等待完成烧录,程序自动跳转到APP中。 注意: 1、如果DSP上电后,3秒内未收到ID:0x00001342发来的数据,则自动跳转到APP中; 2、如果上位机已经打开了
联邦管理系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
ERP与MES系统源代码:WPF开发AGV上位机执行系统,集成SQL数据库技术、多线程技术及应用在工业组态的智能化开发,ERP MES 两套系统源代码 WPF AGV C# WPF开发。 A,WPF MES 上位机产线执行系统。 1, 完整纯源代码; 2, AGV自动调度; 3, SQLSERVER数据库。 带附加文件。 4, WPF各种技术应用。 5, 数据库技术应用。 6, DTU数据传输。 7, TCP IP SOCKET技术应用。 8, EXCEL数据查询与导出。 9, 各种库位的管理。 10,重要是多线程技术应用。 B,WPF工业组态。 1, 智能化工业组态。 2, WPF下的OPC开发。 3, 多链接plc下的工业开发。 4, 数据库的应用。 5, 各种典型WPF页面开发。 ,关键词:ERP; MES; WPF源代码; AGV; C#开发; SQLSERVER数据库; 完整纯源代码; AGV自动调度; 数据库技术应用; DTU数据传输; TCP IP SOCKET技术; EXCEL数据查询与导出; 各种库位管理; 多线程技术; WPF工业组态; 智能化工业组态; OPC开
西门子PLC Smart200锁机与Smart700IE V3程序配套:分期付款、动态验证码、无限次加密程序实例探究,PLC 西门子smart200 锁机 配对应西门子smart700IE V3程序,分期期付款 动态验证码,无限次加密 程序例程 ,核心关键词:西门子smart200; PLC; 锁机; 配对应; 西门子smart700IE V3程序; 分期付款; 动态验证码; 无限次加密; 程序例程。,西门子PLC Smart系列:Smart200锁机与Smart700IE V3程序匹配指南
基于Modbus RTU和TCP/IP协议的LABVIEW上位机数据展示与PLC通讯程序,LABVIEW上位机数据显示程序 本程序具有的功能包括: 1.采用的通讯协议modbus rtu,tcpip ,vmic闪存卡 2.具有故障报警功能 3.主要是与PLC进行通讯,如果支持以上协议的设备也可以通讯。 4.显示界面设计合理,可以借鉴。 本项目难点在于通讯,以及显示量过多,界面排版问题。 程序都有标注,不理解的可以指导。 ,关键词:LABVIEW上位机;数据显示程序;通讯协议;modbus rtu;tcpip;vmic闪存卡;故障报警;PLC通讯;显示界面设计;界面排版。,"Modbus RTU与TCP/IP通讯的LABVIEW上位机数据展示程序:故障报警与界面优化"
"著名车企汽车级平台主控芯片与电机控制器源码揭秘:卓越代码风格一览",著名车企汽车级平台主控芯片,电机控制器源码 ,代码风格极好 ,核心关键词:著名车企;汽车级平台主控芯片;电机控制器源码;代码风格极好;,"著名车企主控芯片源码揭秘:电机控制器代码风格卓越"
RT-Thread内核实现与应用开发实战——基于STM_ (Z-Library)
本代码是基于python pytorch环境安装的。 可参考博文进行安装环境运行代码-但需要先自行收集好图片放到对应文件夹下: https://blog.csdn.net/no_work/article/details/139246467 首先是代码的整体介绍 总共是3个py文件,十分的简便 本代码是不含数据集图片的,下载本代码后需要自行搜集图片放到对应的文件夹下即可 需要我们往每个文件夹下搜集来图片放到对应文件夹下,每个对应的文件夹里面也有一张提示图,提示图片放的位置 然后我们需要将搜集来的图片,直接放到对应的文件夹下,就可以对代码进行训练了。 运行01生成txt.py,是将数据集文件夹下的图片路径和对应的标签生成txt格式,划分了训练集和验证集 运行02CNN训练数据集.py,会自动读取txt文本内的内容进行训练,这里是适配了数据集的分类文件夹个数,即使增加了分类文件夹,也不需要修改代码即可训练 训练过程中会有训练进度条,可以查看大概训练的时长,每个epoch训练完后会显示准确率和损失值 训练结束后,会保存log日志,记录每个epoch的准确率和损失值 最后训练的模型会保
LabVIEW中英文虚拟键盘源程序:支持数字、字母、汉字输入,XP与Win7系统下的输入法检测与切换,触摸屏便捷操作及输入法名称的查看与修改,LabVIEW中英文键盘源程序 可输入数字、字母、汉字,能在 XP系统和Win7系统下检测并切电脑里安装的输入法。 在使用触摸屏电脑的时候可方便的输入所需内容。 有些输入法不同版本对应的编号不一样,可在程序里查看、修改界面显示的输入法名称。 ,LabVIEW; 虚拟键盘源程序; 数字字母汉字输入; 跨系统兼容(XP/Win7); 输入法检测与切换; 触摸屏电脑输入; 输入法名称查看与修改。,LabVIEW多语言虚拟键盘源程序:跨系统输入法切换与显示管理
Python+企业编码管理+源码+论文+毕业设计
智慧档案馆建设方案旨在通过先进的信息技术和智能化手段,全面提升档案管理的效率和安全性,满足现代档案管理的需求。方案涵盖了软件、硬件、网络及安全、分布式存储、数据保护、机房建设等多个方面,确保档案馆在数字化、智能化转型中具备高效、安全、可扩展的能力。 在软件部分,智慧档案馆平台集成了档案接收、管理、保存、智能库房管理、辅助鉴定、编研、统计、内部利用、电子阅览室智能服务等功能模块。通过智能化的档案接收和管理流程,系统能够高效处理各类档案数据,支持历史数据迁移、数字化成果接收、征集档案接收等操作。智能库房管理模块通过虚拟库房、调卷归卷管理、温湿度管理等功能,确保实体档案的安全保管和高效利用。此外,系统还提供了智能辅助鉴定、编研、统计等功能,帮助档案馆实现档案的智能化管理和利用。 硬件部分则包括网络及安全设备、分布式存储、数据保护一体机、离线备份设备、机房建设等。网络及安全设备如核心交换机、汇聚交换机、下一代防火墙、终端安全管理系统等,确保了档案馆网络的高效运行和数据的安全防护。分布式存储系统通过全分布式架构和数据冗余技术,提供了高可伸缩性和高可用性,支持多副本或EC冗余机制,确保数据的安全性和快速重构。数据保护一体机和离线备份设备则通过多种备份和恢复机制,确保数据的完整性和可恢复性。机房建设部分则通过UPS、精密配电柜、精密空调、冷通道机柜等设备,确保机房的稳定运行和高效管理。 智慧档案馆建设方案不仅顺应了国家档案信息化建设的政策要求,还结合了云计算、区块链等新技术,确保了系统的先进性和安全性。通过智能化的档案管理和高效的数据保护机制,档案馆能够更好地服务于公众,提升档案利用效率,实现档案资源的共建共享。这一方案不仅是档案数字化转型的重要举措,也为未来档案馆的智能化发展奠定了坚实基础。