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));
    }
}
相关推荐
isyangli_blog6 分钟前
(1-1)Java的JDK、JRE、JVM三者间的关系
java·开发语言·jvm
zhuiQiuMX21 分钟前
笔试阶段性心得总结
java·python
星沁城1 小时前
236. 二叉树的最近公共祖先
java·数据结构·leetcode·二叉树
oliveira-time2 小时前
Java 1.8(也称为Java 8)
java·开发语言
极小狐4 小时前
如何使用极狐GitLab 软件包仓库功能托管 maven?
java·运维·数据库·安全·c#·gitlab·maven
.生产的驴4 小时前
SpringBoot 集成滑块验证码AJ-Captcha行为验证码 Redis分布式 接口限流 防爬虫
java·spring boot·redis·分布式·后端·爬虫·tomcat
野犬寒鸦6 小时前
MySQL索引使用规则详解:从设计到优化的完整指南
java·数据库·后端·sql·mysql
思考的橙子6 小时前
Springboot之会话技术
java·spring boot·后端
钰爱&6 小时前
【Linux】POSIX 线程信号量与互斥锁▲
java·开发语言·jvm
黑匣子~8 小时前
java集成telegram机器人
java·python·机器人·telegram