Redis数据类型与相关使用场景
前言
Redis数据类型一共8种,其中广为人知的有5种:
string、list、set、zset和hash
另外,还有3种特殊的数据类型:
Geospacial、hyperloglog和bitmap
1.string
string类型可以用作计数器,比如博客访问量,因为redis在计算时是单线程的,所以线程是绝对安全的:
/** * 自增时只能是整数和整数相加,或者浮点数和浮点数相加,不能整数和浮点数混淆 */ public void comput() { stringRedisTemplate.opsForValue().set("number", "5.2"); stringRedisTemplate.opsForValue().increment("number", 1.0); stringRedisTemplate.opsForValue().increment("number", 1.0); System.out.println(stringRedisTemplate.opsForValue().get("number")); }
2.list
list具有有序的特点,可以用于实现简单的消息队列:
/** * 实现简单的消息队列功能,记得初始化时要清空 */ public void list() { stringRedisTemplate.opsForList().getOperations().delete("arr"); stringRedisTemplate.opsForList().leftPush("arr", "1"); stringRedisTemplate.opsForList().leftPush("arr", "2"); stringRedisTemplate.opsForList().leftPush("arr", "3"); stringRedisTemplate.opsForList().leftPush("arr", "4"); stringRedisTemplate.opsForList().rightPop("arr"); System.out.println(stringRedisTemplate.opsForList().rightPop("arr")); System.out.println(stringRedisTemplate.opsForList().rightPop("arr")); System.out.println(stringRedisTemplate.opsForList().rightPop("arr")); }
3.set
set可以进行交集、并集、补集和差集等操作,可以用于找 公共好友:
//首先数据清空
stringRedisTemplate.opsForSet().getOperations().delete("小明"); stringRedisTemplate.opsForSet().getOperations().delete("小海"); stringRedisTemplate.opsForSet().add("小明", "1"); stringRedisTemplate.opsForSet().add("小明", "2"); stringRedisTemplate.opsForSet().add("小明", "5"); stringRedisTemplate.opsForSet().add("小海", "1"); stringRedisTemplate.opsForSet().add("小海", "2"); stringRedisTemplate.opsForSet().add("小海", "3"); //并集,所有好友 Set<String> allFriends = stringRedisTemplate.opsForSet().union("小明", "小海"); //交集,共同好友 Set<String> sameFriends = stringRedisTemplate.opsForSet().intersect("小明", "小海"); //差集,独有好友 Set<String> privateFriends = stringRedisTemplate.opsForSet().difference("小明", "小海");
4.zset
zset又叫sortedset,具有有序的特点,可以用于排行榜:
/** * 实现排行榜功能 */ public void sort() { stringRedisTemplate.opsForZSet().getOperations().delete("排行榜"); stringRedisTemplate.opsForZSet().incrementScore("排行榜", "张三", 10); stringRedisTemplate.opsForZSet().incrementScore("排行榜", "李四", 8); stringRedisTemplate.opsForZSet().incrementScore("排行榜", "王五", 11); stringRedisTemplate.opsForZSet().incrementScore("排行榜", "张三", 10); //榜单前三名 Set<ZSetOperations.TypedTuple<String>> sort = stringRedisTemplate.opsForZSet().reverseRangeWithScores("排行榜", 0, 2); }
5.hash
redission分布式锁有对redis hash的运用,实现了锁的可重入;