字符串是Redis最基本的数据结构,可以存储任意类型的数据,例如文本、数字等。Redis中的字符串是二进制安全的,可以进行基于字符串的操作,如设置、获取、修改、删除等。
应用场景: 单值缓存、对象缓存、计数器
存储结构
SpringBoot中基本操作
@Slf4j
@RestController
@RequestMapping("/redis/string")
public class RedisStringController {
@Resource
private RedisTemplate redisTemplate;
@GetMapping("/set")
public void setString() {
redisTemplate.opsForValue().set("key", 1);
}
@GetMapping("/get")
public void getString() {
Object key = redisTemplate.opsForValue().get("key");
log.info("{}", key);
if (key.equals(1)) {
log.info("111");
}
if ((Integer) key == 1) {
log.info("Integer类型");
}
}
@GetMapping("/delete")
public void deleteString() {
redisTemplate.delete("key");
}
}
列表是一个有序的字符串集合,可以存储多个字符串元素。列表支持在头部或尾部进行元素的插入、删除、获取等操作,还支持根据索引进行访问和修该。列表可以用于实现队列、栈等数据结构。
应用场景: 公众号最新消息
存储结构
SpringBoot中基本操作
@RestController
@Slf4j
@RequestMapping("/redis/list")
public class RedisListController {
@Resource
private RedisTemplate redisTemplate;
@PostMapping("/push")
public void pushList() {
BoundListOperations listOps = redisTemplate.boundListOps("msg:1001");
listOps.leftPush("123");
listOps.leftPush("456");
listOps.rightPush("789");
//使用list集合
// List list = new LinkedList<>();
// list.add("123");
// list.add("456");
// listOps.leftPushAll(list);
}
@PostMapping("/get")
public void getList() {
BoundListOperations listOps = redisTemplate.boundListOps("msg:1001");
Object index = listOps.index(0);
log.info("获取指定索引位置的元素: {}", index);
List range = listOps.range(0, listOps.size() - 1);
log.info("获取所有元素: {}", range.toString());
}
@PostMapping("/pop")
public void popList() {
BoundListOperations listOps = redisTemplate.boundListOps("msg:1001");
Object leftPop = listOps.leftPop();
log.info("从左弹出一个元素: {}", leftPop);
Object rightPop = listOps.rightPop();
log.info("从右弹出一个元素: {}", rightPop);
}
@PostMapping("/del")
public void delList() {
redisTemplate.delete("msg:1001");
}
}
哈希表是一个键值对的无序集合,其中每个键都是一个唯一的字符串,与一个值相关联。哈希表适用于存储对象,每个对象可以有多个属性。在哈希表中,可以对单个键或整个哈希表执行增删改查的操作。
应用场景: 对象缓存、购物车
存储结构
SpringBoot中基本操作
@Slf4j
@RestController
@RequestMapping("/redis/hash")
public class RedisHashController {
@Resource
private RedisTemplate redisTemplate;
@PostMapping("/set")
public void setHash() {
BoundHashOperations hashOps = redisTemplate.boundHashOps("user");
hashOps.put("1:username", "张三");
hashOps.put("1:password", "123");
//或者使用putAll
// Map map = new HashMap<>();
// map.put("1:username", "张三");
// map.put("1:password", "123");
// hashOps.putAll(map);
log.info("set-string");
}
@PostMapping("/get")
public void getHash() {
//获取所有key
BoundHashOperations hashOps = redisTemplate.boundHashOps("user");
Set keys = hashOps.keys();
log.info("获取所有key: {}", keys.toString());
//获取所有value
List values = hashOps.values();
log.info("获取所有value: {}", values.toString());
//根据key获取value
Object o = hashOps.get("1:username");
log.info("根据key获取value: {}", o);
//获取所有键值对集合
Map entries = hashOps.entries();
log.info("获取所有键值对集合: {}", entries.toString());
}
@PostMapping("/find")
public void findHash() {
BoundHashOperations hashOps = redisTemplate.boundHashOps("user");
Boolean hasKey = hashOps.hasKey("1:username");
log.info("判断hash中是否存在该键值对: {}", hasKey);
}
@PostMapping("/del")
public void delHash() {
//删除key(小key)
BoundHashOperations hashOps = redisTemplate.boundHashOps("user");
hashOps.delete("1:username");
//直接删除hash(大key)
redisTemplate.delete("user");
}
}
集合是一组唯一的、无序的字符串元素的集合。集合支持添加、删除、判断元素是否存在等操作,还支持集合间的交集、并集、差集等集合运算操作。集合适用于对成员进行唯一性判断或快速查找。
应用场景: 抽奖、点赞、收藏、标签、微博等平台关注模型(共同好友、可能认识的人等)
存储结构
SpringBoot中基本操作
@RestController
@Slf4j
@RequestMapping("/redis/set")
public class RedisSetController {
@Resource
private RedisTemplate redisTemplate;
@PostMapping("/add")
public void addSet() {
BoundSetOperations setOps = redisTemplate.boundSetOps("act:101");
setOps.add("001", "002", "003");
}
@PostMapping("/member")
public void memberSet() {
BoundSetOperations setOps = redisTemplate.boundSetOps("act:101");
List list = setOps.randomMembers(2);
log.info("随机获取两个元素: {}", list.toString());
Set members = setOps.members();
log.info("获取所有的值: {}", members.toString());
}
@PostMapping("/find")
public void findSet() {
BoundSetOperations setOps = redisTemplate.boundSetOps("act:101");
Boolean member = setOps.isMember("002");
log.info("判断元素是否存在于set中: {}", member);
}
@PostMapping("/remove")
public void removeSet() {
BoundSetOperations setOps = redisTemplate.boundSetOps("act:101");
Long remove = setOps.remove("002");
log.info("移除指定的元素个数: {}", remove);
}
@PostMapping("/del")
public void delSet() {
redisTemplate.delete("act:101");
}
}
有序集合是一个有序的字符串集合,每个字符串都与一个分数相关联。有序集合按照分数进行排序,可以根据分数范围或成员值进行范围查询。有序集合常用于排行榜、排序等场景。
应用场景: 排行榜、带权重的任务调度
存储结构
SpringBoot中基本操作
@RestController
@Slf4j
@RequestMapping("/redis/zset")
public class RedisZSetController {
@Resource
private RedisTemplate redisTemplate;
@GetMapping("/add")
public void addZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
zSetOps.add("李四", 2);
zSetOps.add("王五", 1);
zSetOps.add("刘留", 3);
zSetOps.add("赵六", 4);
zSetOps.add("张三", 6);
}
@GetMapping("/range")
public void rangeZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
Set range = zSetOps.range(0, -1);
log.info("获取ZSet中所有的元素:{}", range);
}
@GetMapping("/rangeByScore")
public void rangeByScoreZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
Set range = zSetOps.rangeByScore(2, 4);
log.info("获取ZSet中指定score范围中的元素:{}", range);
}
@GetMapping("/size")
public void sizeZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
Long size = zSetOps.size();
log.info("获取ZSet中元素的长度:{}", size);
}
@GetMapping("/incrementScore")
public void incrementScoreZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
log.info("获取ZSet中增加前[张三]的score:{}", zSetOps.score("张三"));
zSetOps.incrementScore("张三", 3);
log.info("获取ZSet中增加后[张三]的score:{}", zSetOps.score("张三"));
}
@GetMapping("/count")
public void countZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
Long count = zSetOps.count(2, 6);
log.info("获取ZSet中指定score范围内的个数:{}", count);
}
@GetMapping("/remove")
public void removeZSet() {
BoundZSetOperations zSetOps = redisTemplate.boundZSetOps("hotspot:20230602");
log.info("获取ZSet中移除[李四]之前的元素:{}", zSetOps.range(0,-1));
zSetOps.remove("李四");
log.info("获取ZSet中移除[李四]之后的元素:{}", zSetOps.range(0,-1));
}
}