SpringDataRedis的使用

    技术2025-11-18  24

    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)查询值和分数 /**

    查询值和分数 */ Set<ZSetOperations.TypedTuple> namezset = 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); 比如验证码,一般都会设置过期时间
    Processed: 0.040, SQL: 9