Redis01

springboot+redis

特点

1.高效性

2.支持多种数据结构

String,list,set,hash.zset

3.稳定性:持久化,主从复制(集群)

4.其他特性:支持过期时间,支持事务,消息订阅。

安装

1.下载安装包

redis官网地址:

https://redis.io/ (https://redis.io/)

中文网站

http://www.redis.cn/ (http://www.redis.cn/)
2.解压Redis压缩包完成即安装完毕

3.一些其他配置

启动服务

在redis目录下cmd,输入 redis-server.exe redis.windows.conf

默认端口号

6379

客户端

在redis目录下cmd,输入 redis-cli.exe -h localhost -p 端口号

注册成为服务

在redis目录下cmd,输入 redis-server --service-install redis.windows-service.conf --loglevel verbose

设置密码

在redis.window.conf文件夹下输入,requirepass 123456,redis.window-service.conf要同步修改

登录

在redis目录下cmd,输入 auth 密码

不同数据结构的方法

String

SpringBootTest
class SpringBootRedisApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    StringRedisTemplate stringRedisTemplate;//防止乱码
    //存值StringRedisTemplate相当于RedisTemplate<String, String>
    @Test
    void contextLoads() {
        redisTemplate.opsForValue().set("j4061", "张三");
        stringRedisTemplate.opsForValue().set("j4062", "张三");
    }
    //获取值
    @Test
    void getValue() {
        System.out.println(stringRedisTemplate.opsForValue().get("j4061"));
    }
    //设置过期时间
    @Test
    void setTimeValue(){
        stringRedisTemplate.opsForValue().set("code", "123", 60, SECONDS);
    }
    //判断是否存在并设置值
    @Test
    public void setNX(){
        //如果有对应的键值,则设置值并返回true,如果没有对应的键值,则返回false
        System.out.println(stringRedisTemplate.opsForValue().setIfPresent("j4062", "123"));
        //如果有对应的键值,则返回false,如果没有对应的键值,则返回true
        System.out.println(stringRedisTemplate.opsForValue().setIfAbsent("j4062", "张三"));
    }

hash

 @Autowired
    private StringRedisTemplate stringRedisTemplate;
    //存入hash
    @Test
    void setHash(){
        stringRedisTemplate.opsForHash().put("hash", "key1", "value1");
        stringRedisTemplate.opsForHash().put("hash", "key2", "value2");
        stringRedisTemplate.opsForHash().put("hash", "key3", "value3");
    }
    //获取hash
    @Test
    void getHash(){
        System.out.println(stringRedisTemplate.opsForHash().get("hash", "key1"));
        System.out.println(stringRedisTemplate.opsForHash().get("hash", "key2"));
        System.out.println(stringRedisTemplate.opsForHash().get("hash", "key3"));
    }
    //获取hash的所有key
    @Test
    void getHashKeys(){
        System.out.println(stringRedisTemplate.opsForHash().keys("hash"));
    }
    //获取hash的所有value
    @Test
    void getHashValues(){
        System.out.println(stringRedisTemplate.opsForHash().values("hash"));
    }
    //获取hash的所有entry
    @Test
    void getHashEntries(){
        System.out.println(stringRedisTemplate.opsForHash().entries("hash"));
        }
    //删除hash
    @Test
    void deleteHash(){
        stringRedisTemplate.opsForHash().delete("hash", "key1");
        System.out.println(stringRedisTemplate.opsForHash().get("hash", "key1"));
    }
    //判断hash中是否存在key
    @Test
    void hasKey(){
        System.out.println(stringRedisTemplate.opsForHash().hasKey("hash", "key1"));
        System.out.println(stringRedisTemplate.opsForHash().hasKey("hash", "key2"));
        System.out.println(stringRedisTemplate.opsForHash().hasKey("hash", "key3"));
    }

list

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添

加一个元素到列表的头部(左边)或者尾部(右边)

public class TestList {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    public void setList(){
        //一次添加一个元素
        stringRedisTemplate.opsForList().leftPush("fruits", "pear");
        //一次添加多个元素
        stringRedisTemplate.opsForList().leftPushAll("fruits", "apple", "banana", "orange");
        //在头部添加元素
        stringRedisTemplate.opsForList().leftPush("fruits", "grape");
        //在尾部添加元素
        stringRedisTemplate.opsForList().rightPush("fruits", "watermelon");
        //获取列表长度
        System.out.println(stringRedisTemplate.opsForList().size("长度"+"fruits"));
        //获取列表中所有元素
        System.out.println(stringRedisTemplate.opsForList().range("fruits", 0, -1));
        //获取列表中指定位置的元素
        System.out.println(stringRedisTemplate.opsForList().index("fruits", 2));
        //删除列表中指定位置的元素,如果列表中有多个 "banana",只会删除第一个
        stringRedisTemplate.opsForList().remove("fruits", 1, "banana");
        //获取列表中指定元素的索引
        System.out.println(stringRedisTemplate.opsForList().indexOf("fruits", "orange"));
    }

}

set

1.Redis 的 Set 是 String 类型的无序集合。集合成员是

唯一的,这就意味着集合中不能出现重复的数据

2.Redis 中集合是通过哈希表实现的,所以添加,删

除,查找的复杂度都是 O(1)。

@SpringBootTest
public class TestSet {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    void setSet(){
        // 添加元素到set,可以添加多个元素,返回添加成功的个数
        stringRedisTemplate.opsForSet().add("students","张三","李四","王五");
    }
    @Test
    void getSet(){
        // 获取set中的所有元素
        Set<String> set = stringRedisTemplate.opsForSet().members("students");
        for (String s : set){
            System.out.println(s);
        }
    }
    @Test
    void removeSet(){
        // 从set中移除元素
        stringRedisTemplate.opsForSet().remove("students", "张三");
    }
    @Test
    void sizeSet(){
        // 获取set的大小
        Set<String> set = stringRedisTemplate.opsForSet().members("students");
    }
    @Test
    void containSet(){
        // 判断元素是否在set中
        boolean b = stringRedisTemplate.opsForSet().isMember("students", "张三");
        System.out.println(b);
    }

}

zset

Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,它用来保存需要排序的数据,例如排行榜

@SpringBootTest
public class TestZset {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    //存值
    @Test
    void setZset() {
        stringRedisTemplate.opsForZSet().add("top", "a", 1);
        stringRedisTemplate.opsForZSet().add("top", "b", 3);
        stringRedisTemplate.opsForZSet().add("top", "c", 2);
        (stringRedisTemplate.opsForZSet().range("top", 0, -1)).forEach(System.out::println);
    }
    //取所有值
    @Test
    void getZset() {
        //正序
        System.out.println(stringRedisTemplate.opsForZSet().range("top", 0, -1));
        //倒序
        System.out.println(stringRedisTemplate.opsForZSet().reverseRange("top", 0, -1));
    }
    //获取前两个值,下标从1开始
    @Test
    void getZsetByScore() {
        System.out.println(stringRedisTemplate.opsForZSet().rangeByScore("top", 1, 2));
    }
    //获取排名第2的元素,下标从0开始
    @Test
    void getZsetByRank() {
        System.out.println(stringRedisTemplate.opsForZSet().reverseRank("top", "b"));
    }
    //获取值和权重
    @Test
    void getZsetByScoreWithScores() {
        //第一种方式
        System.out.println(stringRedisTemplate.opsForZSet().rangeWithScores("top", 0, -1));
        //第二种方式
        Cursor< ZSetOperations.TypedTuple<String>> scan = stringRedisTemplate.opsForZSet().scan("top", ScanOptions.NONE);
        while (scan.hasNext()) {
            ZSetOperations.TypedTuple<String> next = scan.next();
            System.out.println(next.getValue() + "----" + next.getScore());
        }
    }
    //删除值
    @Test
    void delZset() {
        stringRedisTemplate.opsForZSet().remove("top", "a");
        System.out.println(stringRedisTemplate.opsForZSet().range("top", 0, -1));
    }
}
相关推荐
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS加油站管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·maven
Hello.Reader1 小时前
Spring Retry 与 Redis WATCH 结合实现高并发环境下的乐观锁
java·redis·spring
纯洁的小魔鬼1 小时前
redis 基础
数据库·redis·命令行
西岭千秋雪_1 小时前
设计模式の单例&工厂&原型模式
java·单例模式·设计模式·简单工厂模式·工厂方法模式·抽象工厂模式·原型模式
fanchael_kui2 小时前
使用elasticsearch-java客户端API生成DSL语句
java·大数据·elasticsearch
m0_748256562 小时前
[CTF夺旗赛] CTFshow Web1-14 详细过程保姆级教程~
java
T.O.P112 小时前
Spring&SpringBoot常用注解
java·spring boot·spring
O(1)的boot2 小时前
微服务的问题
java·数据库·微服务
IT界的奇葩3 小时前
基于springboot使用Caffeine
java·spring boot·后端·caffeine