一. 简单命令示例
Set 可以看成是一个无重复数据容器 简单命令示例
SADD key member[ member. . . ]
SREM key member[ member. . . ]
SMEMBERS key
SISMEMBER key member
SCARD key
SRANDMEMBER key [ 数字]
SPOP key [ 数字]
进阶命令 集合运算
sadd set1 a b c 1 2
sadd set2 1 2 a 3 x
SDIFF set1 set2
SINTER set1 set2
SUNION set1 set2
二. java 操作示例
操作 Set 无序集合类型,不允许重复的成员,是通过哈希表实现的,所有添加,删除,查找的复杂度都是O(1),优点:天然去重,可以取交集,差集等
@Test
public void testSet ( ) {
SetOperations < String , String > setOperations = stringRedisTemplate. opsForSet ( ) ;
String [ ] letters = new String [ ] { "aaa" , "bbb" , "ccc" , "ddd" , "eee" } ;
setOperations. add ( "letters" , letters) ;
Set < String > let = setOperations. members ( "letters" ) ;
setOperations. remove ( "letters" , "aaa" , "bbb" ) ;
}
三. 使用场景
抽奖:key为奖品id,对应key中存储的是所有参与的用户id
SADD key
SCARD key
SRANDMEMBER key5
SPOP key [ 数字]
朋友圈点赞
SADD
SREM
SMEMBERS
SCARD
SISMEMBER
好友关注社交关系图,猜你喜欢,可能认识的人
SINTER set1 set2
SDIFF 他 我
四. 底层分析
首先确定redis中set类型有两种编码格式intset与hashtable 通过"config get set* " 命令查看一个参数"set-max-intset-entries" 默认值是512 当redis中存储set类型数据时,如果元素都是"long long"类型,并且元素个数小于等于"set-max-intset-entries",那么set类型使用intset编码格式,否则使用hashtable编码格式 示例(先查看"set-max-intset-entries"值为512,然后修改为3, 然后存储一个set类型数据"sadd set1 123" 满足小于等于3的条件,查看编码格式为intset, 后续再存储"sadd set1 abcd" 不是long类型,查看编码格式为hashtable)