SpringDataRedis 属于Spring Data 家族一员,用于对redis的操作进行封装的框架
Spring Data ----- Spring 的一个子项目。Spring 官方提供一套数据层综合解决方案,用
于简化数据库访问,支持NoSQL和关系数据库存储。包括Spring Data JPA 、Spring
Data Redis 、SpringDataSolr 、SpringDataElasticsearch 、Spring DataMongodb 等
框架。
首先在类中注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
1.值类型操作
存值
redisTemplate.boundValueOps(“name”).set(“itcast”);
取值
String str = (String) redisTemplate.boundValueOps(“name”).get();
2.Set类型操作
/**
- 存入值
*/
redisTemplate.boundSetOps(“nameset”).add(“曹操”);
redisTemplate.boundSetOps(“nameset”).add(“刘备”);
redisTemplate.boundSetOps(“nameset”).add(“孙权”);
/**
- 提取值
*/
Set members = redisTemplate.boundSetOps(“nameset”).members(); set类型取出的值没有顺序
/**
- 删除集合中的某一个值
*/
redisTemplate.boundSetOps(“nameset”).remove(“孙权”);
/**
- 删除整个集合
*/
redisTemplate.delete(“nameset”);
3.List类型操作
(1)右压栈 后添加的对象排在后边
/**
- 右压栈:后添加的对象排在后边
*/
redisTemplate.boundListOps(“namelist1”).rightPush(“刘备”);
redisTemplate.boundListOps(“namelist1”).rightPush(“关羽”);
redisTemplate.boundListOps(“namelist1”).rightPush(“张飞”);
/**
- 显示右压栈集合
*/
List list = redisTemplate.boundListOps(“namelist1”).range(0, 10); 获取索引为0-10的元素,如果要获取集合中所有的元素,则使用range(0,-1)
运行结果:
[刘备, 关羽, 张飞]
(2)左压栈 后添加的对象排在前边
/**
- 左压栈:后添加的对象排在前边
*/
redisTemplate.boundListOps(“namelist2”).leftPush(“刘备”);
redisTemplate.boundListOps(“namelist2”).leftPush(“关羽”);
redisTemplate.boundListOps(“namelist2”).leftPush(“张飞”);
/**
- 显示左压栈集合
*/
List list = redisTemplate.boundListOps(“namelist2”).range(0, 10);
运行结果:
[张飞, 关羽, 刘备]
(3)根据索引查询元素
/**
- 查询集合某个元素
*/
String s = (String)redisTemplate.boundListOps(“namelist1”).index(1);
(4)移除指定个数的值
/**
- 移除集合某个元素
*/
redisTemplate.boundListOps(“namelist1”).remove(1, “关羽”); 按顺序移除集合中的一个"关羽"
4.Hash类型操作
(1)存入值
redisTemplate.boundHashOps(“namehash”).put(“a”, “唐僧”);
redisTemplate.boundHashOps(“namehash”).put(“b”, “悟空”);
redisTemplate.boundHashOps(“namehash”).put(“c”, “八戒”);
redisTemplate.boundHashOps(“namehash”).put(“d”, “沙僧”);
(2)提取所有的KEY
Set s = redisTemplate.boundHashOps(“namehash”).keys();
运行结果:
[a, b, c, d]
(3)提取所有的值
List values = redisTemplate.boundHashOps(“namehash”).values();
运行结果:
[唐僧, 悟空, 八戒, 沙僧]
(4)根据KEY提取值
Object object = redisTemplate.boundHashOps(“namehash”).get(“b”);
运行结果:
悟空
(5)根据KEY移除值
redisTemplate.boundHashOps(“namehash”).delete(“c”);
5.ZSet类型操作
zset是set的升级版本,它在set的基础上增加了一格顺序属性,这一属性在添加元素
的同时可以指定,每次指定后,zset会自动重新按照新的值调整顺序。可以理解为有两列
的mysql表,一列存储value,一列存储分值。
(1)存值 ,指定分值
redisTemplate.boundZSetOps(“namezset”).add(“曹操”,100000);
redisTemplate.boundZSetOps(“namezset”).add(“孙权”,0);
redisTemplate.boundZSetOps(“namezset”).add(“刘备”,1000);
(2)查询,由低到高
/**
- 由低到高排序
*/
Set namezset = redisTemplate.boundZSetOps(“namezset”).range(0,‐1);
(3)查询,由高到低,土豪榜前10
/**
- 由高到底排序(土豪榜)
*/
Set namezset =redisTemplate.boundZSetOps(“namezset”).reverseRange(0,9);
(4)增加分数
/**
- 增加分值
*/
redisTemplate.boundZSetOps(“namezset”).incrementScore(“孙权”,2000);
(5)查询值和分数
/**
- 查询值和分数
*/
Setnamezset = redisTemplate.boundZSetOps(“namezset”).reverseRangeWithScores(0, ‐1);
for(ZSetOperations.TypedTuple typedTuple:namezset){
System.out.print(“姓名:”+typedTuple.getValue());
System.out.println(“金币:”+typedTuple.getScore());
}
TypedTuple是值与分数的封装。
过期时间设置
/**
- 存值
/
redisTemplate.boundValueOps(“name”).set(“itcast”);
/* - 设置过期时间
*/
redisTemplate.boundValueOps(“name”).expire(10,TimeUnit.SECONDS);