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));
    }
}
相关推荐
rannn_11123 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_124987075326 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
短剑重铸之日32 分钟前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
若鱼19191 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
觉醒大王1 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
forestsea1 小时前
深入理解Redisson RLocalCachedMap:本地缓存过期策略全解析
redis·缓存·redisson
努力学编程呀(๑•ี_เ•ี๑)1 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
佛祖让我来巡山1 小时前
Redis 为什么这么快?——「极速快递站」的故事
redis·redis为什么快?
向上的车轮1 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net