SpringDataRedis的使用

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 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);