Redis知识整理(五) -- Hash&Set类型
Redis知识整理(五) – Hash&Set类型
Hash类型
一、数据格式
Hash类型指的是value的类型
所以Hash类型指的是 value的类型是 key - value
类似于HashMap中嵌套了一层HashMap
二、常用命令
# 为key对应的value的某个属性赋值 > hset lisi name lisi (integer) 1 # 为key对应的value中的多个属性一起赋值 > hmset lisi age 11 address beijing OK # 获取key对应的value的某个属性值 > hget lisi name "lisi" # 获取多个key对应的value中的属性值 > hmget lisi age name 1) "11" 2) "lisi" # 获取key对应的value的所有属性值 > hkeys lisi 1) "name" 2) "age" 3) "address" # 获取key对应的value的所有的属性对应的值 > hvals lisi 1) "lisi" 2) "11" 3) "beijing" # 获取key对应的value的值 > hgetall lisi 1) "name" 2) "lisi" 3) "age" 4) "11" 5) "address" 6) "beijing" # 对key对应的value中的某个属性进行计算 > HINCRBYFLOAT lisi age 0.5 "11.5" > hget lisi age "11.5" > HINCRBYFLOAT lisi age -1 "10.5"
三、常见应用
存储对象
-
或者说存储一种简单的document 好处在于:一次调用可以直接返回整体对象,否则需要至少两次(keys xxx* mget xxxxx) 同时可以直接在redis做数据的计算
Set类型
一、数据格式
List类型和Hash类型的区别
-
set是无序的(插入和弹出是无序的) set不允许出现重复数据,天然是去重的
二、常用命令
# 往k1对应的set添加元素 注意:set不允许重复数据添加 > sadd k1 tom sean peter ooxx tom xxoo (integer) 5 # 查看k1对应的set的所有元素,注意:元素是无序的 > SMEMBERS k1 1) "sean" 2) "tom" 3) "ooxx" 4) "peter" 5) "xxoo" # srem删除set的对应元素 > srem k1 ooxx xxoo (integer) 2 > SMEMBERS k1 1) "tom" 2) "peter" 3) "sean" # 计算set的交集 # 注意: SINTER直接返回结果 SINTERSTORE将结果存储到给出的key,不直接返回结果 # 好处在于: 如果需要存储交集,直接使用SINTERSOTRE避免进入IO,还多一次交互 > sadd k2 1 2 3 4 5 > sadd k3 4 5 6 7 8 > SINTER k2 k3 1) "4" 2) "5" > SINTERSTORE dest k2 k3 (integer) 2 > SMEMBERS dest 1) "4" 2) "5" # 计算交集 # 注意:结果同样是去重的 > SUNION k2 k3 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8" > SUNIONSTORE dest2 k2 k3 (integer) 8 # 计算差集 # 注意: 通过前后key的顺序表达差集的结果 > SDIFF k2 k3 1) "1" 2) "2" 3) "3" > SDIFF k3 k2 1) "6" 2) "7" 3) "8" # 取随机数 > sadd kn tom ooxx xxoo xoxo oxox xoox oxxo # 数为正数时 保证取出3个结果 且为去重的 前提是结果集不少于3 > SRANDMEMBER k1 3 1) "ooxx" 2) "tom" 3) "xoox" # 数为负数时 保证取出3个结果 且不为去重的 结果集少于3个也会出3个 有重复的 > SRANDMEMBER k1 -3 1) "xoox" 2) "xoxo" 3) "xoox" # 取出数大于候选集size 负数 出满足个数的可重复的结果集 > SRANDMEMBER k1 -10 1) "xxoo" 2) "xoxo" 3) "oxox" 4) "ooxx" 5) "ooxx" 6) "ooxx" 7) "oxxo" 8) "oxxo" 9) "xxoo" 10) "xoxo" # 弹出则从set中消失 > SPOP k1 "oxox" > SPOP k1 "xoxo" > SMEMBERS k1 1) "tom" 2) "ooxx" 3) "oxxo" 4) "xoox" 5) "xxoo"
三、常见应用
1. 抽奖(例如:微博抽奖 – 礼物少人多)
利用SRANDMEMBER命令
可以控制取出3个不同的粉丝 还是3个有可能相同的粉丝
2.抽奖(礼物多人少)
同样利用SRANDMEMBER命令
n个礼物,以人为结果集,抽出n个人即可
3.抽象(年会抽奖)
不重复出现,中奖后则从奖池中删除
利用SPOP命令,依次随机弹出(Set本身就是无序的,所以可以保证随机)
上一篇:
IDEA上Java项目控制台中文乱码