RedisTemplate常用数据存储API

本文介绍Redis五种主要数据类型的使用方法,包括String、Hash、List、Set及ZSet。涵盖每种类型的基本操作如存储、查询、修改等,并举例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、String类型数据

1.1 存储值

// 保存一个key为a,值为“我是A”的数据
redisTemplate.boundValueOps("abc").set("我是A");

1.2 查询值

// 获取一个key为abc的值
String abcValue = (String)redisTemplate.boundValueOps("abc").get();

1.3 修改值

// 修改key为abc的值,并设置过期时间为5秒
redisTemplate.boundValueOps("abc").set("我是B",5, TimeUnit.SECONDS);
// 修改key为abc的值,并获取修改前的值
String abcValue = (String)redisTemplate.boundValueOps("abc").getAndSet("我是B",5, TimeUnit.SECONDS); // abcValue的值为修改前的值

1.4 自增

// 创建一个key为number的数据,值为1(储存的值必须是long或者double),然后实现获取值的时候自增1
BoundValueOperations number = redisTemplate.boundValueOps("number");
number.set(1);
number.increment(1);

2、Hash类型数据

2.1 存储值

// 保存一个键为“我是A”,值为“AAA”的数据,redis的key为abc
redisTemplate.boundHashOps("abc").put("name","AAA");
// 批量保存
Map<String, Object> map = new HashMap();
map.put("name","abc");
map.put("age",18);
redisTemplate.boundHashOps("abc").putAll(map);

2.2 查询值

BoundHashOperations a = redisTemplate.boundHashOps("abc");
// 获取key为abc的数据,并且数据里面的键为“我是A”
String name = (String)a.get("name");
// 获取所有键
Set keys = a.keys(); // keys值为:[age, name]
// 获得所有值
List values = a.values(); // values值为:[18, abc]
// 获得键值对
Map entries = a.entries(); // 值为:{age=18, name=abc}

2.3 自增

// 创建一个key为number的数据,值为{count=1},然后实现获取值的时候自增1
BoundHashOperations number = redisTemplate.boundHashOps("number");
number.increment("count",1);

3、List类型数据

3.1 存储值

// 从链表左边储存数据
BoundListOperations a = redisTemplate.boundListOps("abc");
a.leftPush("a");
// 从链表右边储存数据
a.rightPush("b");

3.2 取出值

BoundListOperations a = redisTemplate.boundListOps("abc"); // 假设abc里面的数据为[a,b,c,d]
// 左边弹出一个值
a.leftPop(); // abc里面的值为[b,c,d],弹出的值为a
// 然后右边弹出一个值
a.rightPop(); // abc里面的值为[b,c],弹出的值为d

3.3 查询值

BoundListOperations a = redisTemplate.boundListOps("abc"); // 假设abc里面的数据为[a,b,c,d]
// 获取abc中,索引从0到2的值,把end的值改为-1表示到最后一位
List range = a.range(0, 2); // range值为[a,b,c]
// 获取abc中,索引为1的值
String index = (String) a.index(1); // index值为b

4、Set类型数据

4.1 存储值

// 批量添加数据,还可以放集合、数组、
BoundSetOperations a = redisTemplate.boundSetOps("abc");
a.add("a","b","c");

4.2 获取值

// 假设abc里面的值为a,b,c
BoundSetOperations a = redisTemplate.boundSetOps("abc");
// 获取所有值
Set members = a.members(); // members值为[a, c, b]
// 随机获取2个值
List list = a.randomMembers(2); // list的值为[b, c]
// 随机获取一个值
String value = (String) a.randomMember(); // value的值为b

4.3 弹出、移除

// 假设abc里面的值为a,b,c
BoundSetOperations a = redisTemplate.boundSetOps("abc");
// 随机弹出一个元素
a.pop();
// 移除元素
a.remove();

5、ZSet数据类型

5.1 存储值

// 存储值同时需要带上分数
BoundZSetOperations a = redisTemplate.boundZSetOps("abc");
a.add("a",1);
a.add("b",2);
a.add("c",3);

5.2 获取值

// 获取指定区间的值,end值为-1表示到最后一位
Set range = a.range(0, -1); // range值为[a,b,c]

5.3 移除值

// 移除值为b的数据
a.remove("b");
### RedisTemplate 常用方法总结及使用示例 #### 1. 数据存储与获取 `RedisTemplate` 提供了一系列用于操作键值对的方法,以下是常用的几个: - **set(key, value)** 将指定的 key 设置为给定的 value。如果没有设置过期时间,则该 key 不会自动删除。 ```java redisTemplate.opsForValue().set("key", "value"); ``` - **get(key)** 获取指定 key 对应的 value。 ```java String value = (String) redisTemplate.opsForValue().get("key"); ``` - **set(key, value, timeout, timeUnit)** 设置带有过期时间的 key-value 对。 ```java redisTemplate.opsForValue().set("article_1", "Article Content", 10, TimeUnit.SECONDS); ``` #### 2. 列表操作 列表是 Redis 中的一种数据结构,支持从头部或尾部插入/移除元素。 - **leftPush(key, value)** 向列表左侧(头)添加一个元素。 ```java redisTemplate.opsForList().leftPush("listKey", "item1"); ``` - **rightPop(key)** 移除并返回列表右侧的第一个元素。 ```java Object item = redisTemplate.opsForList().rightPop("listKey"); ``` #### 3. 集合操作 集合是一种无序且不允许重复的数据结构。 - **add(key, values)** 添加一个或多个成员到集合中。 ```java redisTemplate.opsForSet().add("setKey", "member1", "member2"); ``` - **members(key)** 返回集合中的所有成员。 ```java Set<Object> members = redisTemplate.opsForSet().members("setKey"); ``` #### 4. 哈希操作 哈希是一个字符串类型的字段和值之间的映射关系。 - **put(hashKey, field, value)** 在哈希表中设置指定字段的值。 ```java redisTemplate.opsForHash().put("hashKey", "field1", "value1"); ``` - **entries(hashKey)** 获取整个哈希表的内容。 ```java Map<Object, Object> entries = redisTemplate.opsForHash().entries("hashKey"); ``` #### 5. 删除操作 可以通过 `delete` 方法删除单个或多个 key。 ```java redisTemplate.delete("key"); // 单个 key redisTemplate.delete(Arrays.asList("key1", "key2")); // 多个 keys ``` #### 6. 过期时间管理 可以为某个 key 设置过期时间,在超过设定的时间后,该 key 自动被删除。 ```java // 设置过期时间为 10 秒 redisTemplate.expire("key", 10, TimeUnit.SECONDS); // 查询剩余生存时间 Long ttl = redisTemplate.getExpire("key", TimeUnit.SECONDS); ``` --- ### 关于 Redis 的删除策略 Redis 实现了惰性删除和定期删除两种机制来处理过期数据[^2]。这种设计能够在 CPU 资源消耗和内存利用率之间找到平衡。 --- ### 事务操作 当需要在一个逻辑单元内完成多步操作时,可以借助 `SessionCallback` 来开启事务[^3]。 ```java TransactionOperations transactionOperations = redisTemplate.getTransaction(); transactionOperations.set.Transactional(true); redisTemplate.execute(new SessionCallback<List<Object>>() { @Override public List<Object> execute(RedisOperations operations) throws DataAccessException { operations.multi(); // 开启事务 operations.opsForValue().set("tx_key", "tx_value"); operations.opsForValue().increment("counter"); return operations.exec(); // 提交事务 } }); ``` --- ### 缓存注解方式 除了手动调用 API,还可以利用 Spring Cache 注解简化缓存的操作流程[^4]。 ```java @Cacheable(value = "articles", key = "#id") public Article getArticleById(Long id) { return articleRepository.findById(id).orElse(null); } @CachePut(value = "articles", key = "#id") public void updateArticle(Long id, Article updatedArticle) { articleRepository.save(updatedArticle); } ``` 上述代码展示了如何通过注解实现缓存读取 (`@Cacheable`) 和更新 (`@CachePut`) 功能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值