集合 Set
Redis 的集合不是 个线性结构, 而是一个哈希表结构, 它的内部会根据 hash 分子来
存储和查找数据, 理论上 个集合可以存储 232 (大约 42 亿) 个元素, 因为采用哈希表结
构, 所以对于 Redis 集合的插入, 删除和查找的复杂度都是 0(1 ), 只是我们需要注意:
1. 对于集合而言, 它的每 个元素都是不能重复的, 当插入相同记录的时候都会失败
2. 集合是无序的.
3. 集合的每 个元素都是 String 数据结构类型.
Red is 的集合可以对于不同的集合进行操作, 比如求出两个或者以上集合的交集, 差集和并集等.
sadd/smembers/sismember
sadd key number [member2 .....] 给键为 key 的集合增加成员, 可增加多个
smembers key 返回集合所有成员
sismember key member 判断 member 是否是 key 集合的成员
scard, 获取集合里面的元素个数
获取集合里面的元素个数
scard key
srem key value 删除集合中元素
srem key member [ member2 .... ]
移除集合中 元素, 可以是多个元素
srandmember key 某个整数 (随机出几个数)
* 从 set 集合里面随机取出 2 个
* 如果超过最大数量就全部取出,
* 如果写的值是负数, 比如 - 3 , 表示需要取出 3 个, 但是可能会有重复值.
srandmember key [count]
count 为随机出数的个数, 默认为 1, 为负数则取绝对值
spop key 随机出栈
随机弹 集合的一个元素
注意其随机性 因为集合是无序的
smove key1 key2 在 key1 里某个值 作用是将 key1 里的某个值赋给 key2
smove src des member
将成员 member 从集合 src 迁移到集合 des
原来集合的值可以说已经没有了, 直接去了另一个集合, 另一个集合可以存在, 不存在则创建
差集: sdiff
交集: sinter
并集: sunion
sdiff key I [key2] 找出两个综合的差集 参数如果是单 key , 那么 Red is 就返回这 key 的所有元素
sinter key I [key2] key key2 两个集合的交集. 参数如果是单 key , 那么 Red is 就返回这 key 的所有元素
sunion key l [key2] 求两 集合 并集 参数如果是单 key , 那么 Red is 就返回这 key 的所有元素
Hash 哈希
Redis 中哈希结构就如同 Java map 一样 个对象里面有许多键值对, 它是特别
合存储对象的 , 如果内存足够大, 那么 Redis hash 结构可以存储 232_ 键值对 40
多亿). 般而言 不会使用到那么大的一个键值对, 所以我们认为 Redis 可以存储很多的
键值对. 在 Redis 中, hash 是一个 String 类型的 field value 映射表, 因此我们存储的
数据实际在 Redis 内存中的一个字符串
hash 的键值对在内存中是一种无序的状态
KV 模式不变, 但 V 是一个键值对
hset/hget/hmset/hmget/hgetall/hdel
hset key file value: 设置键值对 单个
hget : 获取属性值 单个
hmset key field1 value1 [filed2 value2...] 设置键值对, 多个
hmget: 获取多个 hash 指定键的值 多个
hgetall: 获取所有 hash 结构中的值
hdel: 删除 hash 中的某些字段
hlen 返回 key 中的数量
hexists key 在 key 里面的某个值的 key
hkeys/hvals
hkeys: 获取所有的键
hvals: 获取所有的值
hincrby/hincrbyfloat
hincrby key field incremen: 指定给 hash 结构中的某 字段加上 个整, 要求该字段也是整数字符串
hincrbyfloat key field increment: 指定给 hash 结构中的某 字段加上 个浮点数, 要求该字段也是整数字符串
hsetnx: 不存在赋值, 存在了无效.
hsetnx key field value
有序集合:
只是说它是有序的
和无序集合的主要区别在于每 个元素除了值之外, 它还会多一个分数
分数是一个浮点数, 在 Java 中是使用双精度表示的
Redis 就可以支持对分数从小到大或者从大到小的排序. 这里和无序集合一样, 对于
每一个元素都是唯一的 , 但是对于不同元素而 , 它的分数可以一样.
有序集合是依赖 key 标示它是属于哪个集合, 依赖分数进行排序, 所以值和分数是必须的
zadd/zrange
zadd key score value(value1) [score2 value2 ...] : 增加一个或多个成员, key 不存在则创建有序集合
zrangebyscore key 开始 score 结束 score
zrem key 某 score 下对应的 value 值, 作用是删除元素
zcard/zcount key score 区间 / zrank key values 值, 作用是获得下标值 / zscore key 对应值, 获得分数
zcard: 统计个数
zcount key score: zcount key min max 根据分数返回对应的成员列表
zrank key values:
zrevrank key values 值, 作用是逆序获得下标值
zrevrange 从大到小的按分数排序
zrevrange key start end
zrevrangebyscore key 结束 score 开始 score
从大到小的按分数排序
zrevrangebyscore key max min [withscores
来源: https://www.cnblogs.com/Mrchengs/p/10049236.html