1.1什么是resis
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
1.2Redis 与其他 key - value 缓存产品有以下三个特点
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份
1.3redis的优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
2.1window下redis的安装
首先在windows下下载安装redis
下载地址:https://github.com/MicrosoftArchive/redis/releases
进行解压即可使用 (备注:根据具体的操作系统具体现在对应32还是64位)
2.1运行测试
cd切换到redis目录 运行 redis-server.exe redis.windows.conf ,出现以下显示
另开一个cmd cd切换到redis目录 运行redis-cli.exe -h 127.0.0.1 -p 6379 .
设置键值对 set key 123
取出键值对 get key
出现以下显示说明测试成功
备注:以上操作每次都得运行 redis-server.exe redis.windows.conf 开启redis,实际业务中并不可操作
打开cmd窗口输入services.msc,Redis出现在服务中,自行启动该服务
3.redis配置
3.1通过CONFIG 命令查看或设置配置项
CONFIG GET CONFIG_SETTING_NAME
CONFIG GET loglevel
CONFIG GET * 获取所有配置项
3.1编辑配置
4.Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
4.1string(字符串)
注意:一个键最大能存储512MB。
4.2hash(哈希)
Redis hash 是一个键值对集合
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HEGTALL 命令,user:1 为键值。
每个 hash 可以存储 232 - 1 键值对(40多亿)
4.3list(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)
4.4set(集合)
Redis的Set是string类型的无序集合
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误
注意:以上实例中 engineer 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
4.5zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复
5.redis命令
redis-cli -h host -p port -a password
执行 PING 命令,该命令用于检测 redis 服务是否启动
5.1redis 键(key)
del
dump
DUMP KEY_NAME
EXISTS
命令用于检查给定 key 是否存在
Expire
命令用于设置 key 的过期时间。key 过期后将不再可用 Expire KEY_NAME TIME_IN_SECONDS
Expireat
命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用 Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP (后加时间戳)
PEXPIREAT
命令用于设置 key 的过期时间,已毫秒技。key 过期后将不再可用 PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
Keys
命令 - 查找所有符合给定模式( pattern)的 key KEYS PATTERN
Move
命令 - 将当前数据库的 key 移动到给定的数据库 db 当中
备注: 当源数据库和目标数据库有相同的 key 时
PERSIST
命令用于移除给定 key 的过期时间,使得 key 永不过期 PERSIST KEY_NAME
Pttl
命令 - 以毫秒为单位返回 key 的剩余的过期时 PTTL KEY_NAME
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。
注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1
TL
命令以秒为单位返回 key 的剩余过期时间 TTL KEY_NAME
RANDOMKEY
命令从当前数据库中随机返回一个 key RANDOMKEY
Rename
命令用于修改 key 的名称 RENAME OLD_KEY_NAME NEW_KEY_NAME
改名成功时提示 OK ,失败时候返回一个错误。
当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值
Renamenx
命令用于在新的 key 不存在时修改 key 的名称 RENAMENX OLD_KEY_NAME NEW_KEY_NAME
修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0
Type
命令用于返回 key 所储存的值的类型 TYPE KEY_NAME
返回 key 的数据类型,数据类型有:
- none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
6.Redis 字符串(String)
字符串数据类型的相关命令用于管理 redis 字符串值,基本语法 COMMAND KEY_NAME
返回 key
中字符串值的子字符串,字符串的截取范围由 start
和 end
两个偏移量决定(包括 start
和 end
在内)
负数偏移量表示从字符串最后开始计数, -1
表示最后一个字符, -2
表示倒数第二个,以此类推
GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)
返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。
当 key 存在但不是字符串类型时,返回一个错误
GETBIT key offset
命令用于设置指定 key 的值,并返回 key 的旧值
MGET key1 [key2..]
命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil MGET KEY1 KEY2 .. KEYN
SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
Setex
命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值 SETEX KEY_NAME TIMEOUT VALUE
Setnx
命令在指定的 key 不存在时,为 key 设置指定的值 SETNX KEY_NAME VALUE
设置成功,返回 1 。 设置失败,返回 0
Setrange
命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始 SETRANGE KEY_NAME OFFSET VALUE
Strlen
命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误 STRLEN KEY_NAME
字符串值的长度。 当 key 不存在时,返回 0
Mset
命令用于同时设置一个或多个 key-value 对 MSET key1 value1 key2 value2 .. keyN valueN
总是返回 OK
Msetnx
命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对 MSETNX key1 value1 key2 value2 .. keyN valueN
Psetex
命令以毫秒为单位设置 key 的生存时间 PSETEX key1 EXPIRY_IN_MILLISECONDS value1
Incr
命令将 key 中储存的数字值增一 INCR KEY_NAME
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
本操作的值限制在 64 位(bit)有符号数字表示之内
Incrby
命令将 key 中储存的数字加上指定的增量值 INCRBY KEY_NAME INCR_AMOUNT
返回值 加上指定的增量值之后, key 的值
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
本操作的值限制在 64 位(bit)有符号数字表示之内
Incrbyfloat
命令为 key 中所储存的值加上指定的浮点数增量值 INCRBYFLOAT KEY_NAME INCR_AMOUNT
Decr
命令将 key 中储存的数字值减一 DECR KEY_NAME
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
本操作的值限制在 64 位(bit)有符号数字表示之内
Decrby
命令将 key 所储存的值减去指定的减量值 DECRBY KEY_NAME DECREMENT_AMOUNT
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
本操作的值限制在 64 位(bit)有符号数字表示之内
Append
命令用于为指定的 key 追加值 APPEND KEY_NAME NEW_VALUE
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样
7.Redis 哈希(Hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
Hdel
命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略 HDEL KEY_NAME FIELD1.. FIELDN
返回 被成功删除字段的数量,不包括被忽略的字段
Hexists
命令用于查看哈希表的指定字段是否存在 HEXISTS KEY_NAME FIELD_NAME
返回 如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0
Hget
命令用于返回哈希表中指定字段的值 HGET KEY_NAME FIELD_NAME
返回值 返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil
Hgetall
命令用于返回哈希表中,所有的字段和值 HGETALL KEY_NAME
返回 以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表
Hincrby
命令用于为哈希表中的字段值加上指定增量值 HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
增量也可以为负数,相当于对指定字段进行减法操作
如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0
对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误
本操作的值被限制在 64 位(bit)有符号数字表示之内
Hincrbyfloat
命令用于为哈希表中的字段值加上指定浮点数增量值 HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0
返回 执行 Hincrbyfloat 命令之后,哈希表中字段的值
Hkeys
命令用于获取哈希表中的所有域(field)HKEYS key
返回 包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表
Hlen
命令用于获取哈希表中字段的数量 HLEN KEY_NAME
返回 哈希表中字段的数量。 当 key 不存在时,返回 0
Hmget
命令用于返回哈希表中,一个或多个给定字段的值 HMGET KEY_NAME FIELD1...FIELDN
如果指定的字段不存在于哈希表,那么返回一个 nil 值
返回 一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样
Hmset
命令用于同时将多个 field-value (字段-值)对设置到哈希表中 HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
此命令会覆盖哈希表中已存在的字段
如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作
Hset
命令用于为哈希表中的字段赋值 HSET KEY_NAME FIELD VALUE
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作
如果字段已经存在于哈希表中,旧值将被覆盖
Hsetnx
命令用于为哈希表中不存在的的字段赋值 HSETNX KEY_NAME FIELD VALUE
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作
如果字段已经存在于哈希表中,操作无效
如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令
Hvals
命令返回哈希表所有域(field)的值 HVALS KEY_NAME FIELD VALUE
返回 一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表
HSCAN
8.列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
8.8Lpush
命令将一个或多个值插入到列表头部 LPUSH KEY_NAME VALUE1.. VALUEN
如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误
返回 执行 LPUSH 命令后,列表的长度
Lpushx
将一个值插入到已存在的列表头部,列表不存在时操作无效 LPUSHX KEY_NAME VALUE1.. VALUEN
返回 LPUSHX 命令执行之后,列表的长度
Lrange
返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定 LRANGE KEY_NAME START END
其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
Lrem
根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素 LREM KEY_NAME COUNT VALUE
COUNT 的值可以是以下几种:
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
- count = 0 : 移除表中所有与 VALUE 相等的值
Lset
通过索引来设置元素的值 LSET KEY_NAME INDEX VALUE
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误
Ltrim
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
Rpop
命令用于移除并返回列表的最后一个元素 RPOP KEY_NAME
Rpoplpush
命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回 RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME
Rpush
命令用于将一个或多个值插入到列表的尾部(最右边) RPUSH KEY_NAME VALUE1..VALUEN
如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误
注意:在 Redis 2.4 版本以前的 RPUSH 命令,都只接受单个 value 值
Rpushx
命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效 RPUSHX KEY_NAME VALUE1..VALUEN
Lpop
命令用于移除并返回列表的第一个元素 Lpop KEY_NAME
返回 列表的第一个元素。 当列表 key 不存在时,返回 nil
Llen
命令用于返回列表的长度 LLEN KEY_NAME
如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 如果 key 不是列表类型,返回一个错误
Linsert
命令用于在列表的元素前或者后插入元素 LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误
Lindex
命令用于通过索引获取列表中的元素 LINDEX KEY_NAME INDEX_POSITION
你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
Brpoplpush
命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT
返回值 假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长
9.Redis 集合(Set)
Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
Sadd
命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。
当集合 key 不是集合类型时,返回一个错误
返回 被添加到集合中的新元素的数量,不包括被忽略的元素
Scard
命令返回集合中元素的数量
Sdiff
命令返回给定集合之间的差集。不存在的集合 key 将视为空集 SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集
返回 包含差集成员的列表
Sdiffstore
命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖 SDIFFSTORE DESTINATION_KEY KEY1..KEYN
Sinter
命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律) SINTER KEY KEY1..KEYN
Sinterstore
命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖 SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN
Sismember
命令判断成员元素是否是集合的成员 SISMEMBER KEY VALUE
返回 如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0
Smembers
命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合 SMEMBERS key
Smove
命令将指定成员 member 元素从 source 集合移动到 destination 集合 SMOVE SOURCE DESTINATION MEMBER
SMOVE 是原子性操作
如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去
当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除
当 source 或 destination 不是集合类型时,返回一个错误
返回 如果成员元素被成功移除,返回 1 。 如果成员元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0
Spop
命令用于移除并返回集合中的一个随机元素 SPOP KEY
返回 被移除的随机元素。 当集合不存在或是空集时,返回 nil
Srandmember
命令用于返回集合中的一个随机元素 SRANDMEMBER KEY [count]
Srem
命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略 SREM KEY MEMBER1..MEMBERN
当 key 不是集合类型,返回一个错误
在 Redis 2.4 版本以前, SREM 只接受单个成员值
返回 被成功移除的元素的数量,不包括被忽略的元素
Sunion
命令返回给定集合的并集。不存在的集合 key 被视为空集
返回 并集成员的列表
Sunionstore
命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖 SUNIONSTORE DESTINATION KEY KEY1..KEYN
返回 结果集中的元素数量
Sscan
命令用于迭代集合键中的元素 SSCAN key cursor [MATCH pattern] [COUNT count]
10.Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
Zadd
命令用于将一个或多个成员元素及其分数值加入到有序集当中 ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上
分数值可以是整数值或双精度浮点数
如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作
当 key 存在但不是有序集类型时,返回一个错误
注意: 在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素
返回 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员
Zcard
命令用于计算集合中元素的数量 ZCARD KEY_NAME
返回 当 key 存在且是有序集类型时,返回有序集的基数。 当 key 不存在时,返回 0
Zcount
命令用于计算有序集合中指定分数区间的成员数量 ZCOUNT key min max
返回 分数值在 min 和 max 之间的成员的数量
Zincrby
命令对有序集合中指定成员的分数加上增量 increment ZINCRBY key increment member
可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5
当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member
当 key 不是有序集类型时,返回一个错误
分数值可以是整数值或双精度浮点数
返回 member 成员的新分数值,以字符串形式表示
Zinterstore
命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和
返回 保存到目标结果集的的成员数量
Zlexcount
命令在计算有序集合中指定字典区间内成员数量 ZLEXCOUNT KEY MIN MAX
返回 指定区间内的成员数量
Zrange
返回有序集中,指定区间内的成员 ZRANGE key start stop [WITHSCORES]
其中成员的位置按分数值递增(从小到大)来排序
具有相同分数值的成员按字典序(lexicographical order )来排列
如果你需要成员按
值递减(从大到小)来排列,请使用 ZREVRANGE 命令
下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推
也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推
Zrangebylex
通过字典区间返回有序集合的成员 ZRANGEBYLEX key min max [LIMIT offset count]
Zrangebyscore
返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列
具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)
默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)
Zrank
返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列 ZRANK key member
返回 如果成员是有序集 key 的成员,返回 member 的排名。 如果成员不是有序集 key 的成员,返回 nil
Zrem
命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略 ZREM key member [member ...]
当 key 存在但不是有序集类型时,返回一个错误
注意: 在 Redis 2.4 版本以前, ZREM 每次只能删除一个元素
Zremrangebylex
命令用于移除有序集合中给定的字典区间的所有成员 ZREMRANGEBYLEX key min max
返回 被成功移除的成员的数量,不包括被忽略的成员
Zremrangebyrank
命令用于移除有序集中,指定排名(rank)区间内的所有成员 ZREMRANGEBYRANK key start stop
返回 被移除成员的数量
Zremrangebyscore
命令用于移除有序集中,指定分数(score)区间内的所有成员 ZREMRANGEBYSCORE key min max
返回 被移除成员的数量
Zrevrange
命令返回有序集中,指定区间内的成员
其中成员的位置按分数值递减(从大到小)来排列
具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列
除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样
Zrevrangebyscore
返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列
具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列
除了成员按分数值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样
Zrevrank
命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序 ZREVRANK key member
排名以 0 为底,也就是说, 分数值最大的成员排名为 0
使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名
返回 如果成员是有序集 key 的成员,返回成员的排名。 如果成员不是有序集 key 的成员,返回 nil
Zscore
命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil ZSCORE key member
Zunionstore
命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和
Zscan
11.Redis HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素
11.1什么是基数
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数