• Redis入门


    Redis基础

    Redis是Key-Value型NoSQL数据库,将数据存储在内存中,同时也能持久化到磁盘,Redis常用于缓存,利用内存的高效提高程序的处理速度。

    Redis的特点:

    • 速度快
    • 广泛的语言支持
    • 持久化
    • 多种数据结构
    • 主从复制
    • 分布式与高可用

    Redis常用基本配置项:
    在这里插入图片描述

    ./src/redis-server redis.conf 启动redis服务
    ./src/redis-cli shutdown 关闭redis服务
    ./src/redis-cli -p 端口号 启动redis客户端,-p指定端口(修改默认端口后连接redis需要加端口)

    Redis数据库的名称是一个一个的数字,默认是0-15,一共16个数据库,可在redis.conf文件中修改databases

    设置requirepass后,启动客户端后需要输入auth 密码登陆

    Redis通用命令:
    在这里插入图片描述

    Redis常用数据类型:

    • String 字符串类型
    • Hash 键值对类型
    • List 列表类型
    • Set 集合类型
    • Zset 有序集合类型

    String 字符串类型
    String最大512mb,建议单个不超过100kb

    常用字符串命令:
    在这里插入图片描述
    Hash 键值对类型
    Hash类型用于存储结构化数据
    在这里插入图片描述
    常用Hash命令:
    在这里插入图片描述
    List 列表类型
    List列表就是一系列字符串的“数组”,按插入顺序排序;
    List列表最大长度为2的32次方-1,可以包含40亿个元素

    List命令:
    在这里插入图片描述

    lrange list 0 -1 输出列表中的元素

    Set 集合类型
    Set集合是字符串的无序集合,且集合成员唯一
    sadd set1 b c d 往set1中添加元素
    smembers set1 查看set1中的元素
    sinter set1 set2 交集
    sunion set1 set2 并集
    sdiff set1 set2 差集,set1中有的,set2中没有的

    Zset 集合类型
    Zset集合是字符串的有序集合,且集合成员唯一
    zadd zset1 99 c 往zset1中添加元素,并设置分数(元素按分数排序)
    zrange zset1 0 -1 查看zset1中的元素
    zrange zset1 0 -1 withscores 查看zset1中的元素和分数

    Java中使用Redis

    Jedis:
    由Java语言开发的Redis客户端工具,对Redis命令进行了封装,方便上手

    添加依赖:

    <dependency>
        <groupId>redis.clientsgroupId>
        <artifactId>jedisartifactId>
        <version>5.0.0version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    连接到redis数据库

    //端口为默认端口时,可以不写
    Jedis jedis = new Jedis("192.168.77.129",6379);
    //选择数据库2
    jedis.select(2);      
    
    • 1
    • 2
    • 3
    • 4

    jedis操作字符串类型:

    jedis.set("sn","7788-9900");
    String sn = jedis.get("sn");  
    
    • 1
    • 2
    //可传入String数组或byte数组
    jedis.mset(new String[]{"title","婴幼儿奶粉","num","20"});
    List<String> goods = jedis.mget(new String[]{"sn", "title", "num"});         
    
    • 1
    • 2
    • 3
    Long num = jedis.incr("num");
    
    • 1

    jedis操作Hash类型:

    jedis.hset("student:332","name","小明");
    String name = jedis.hget("student:332","name");
    
    • 1
    • 2
    Map<String,String> hash = new HashMap<>();
    hash.put("name","小李");
    hash.put("age","18");
    jedis.hmset("student:331",hash);
    
    Map<String,String> smap = jedis.hgetAll("student:331");        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    jedis操作List类型:

    jedis.del("letter");
    jedis.rpush("letter",new String[]{"d","e","f"});
    jedis.lpush("letter",new String[]{"c","b","a"});
    List<String> letter = jedis.lrange("letter",0,-1);
    jedis.lpop("letter");
    jedis.rpop("letter");
    letter = jedis.lrange("letter",0,-1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    利用Redis缓存数据:

    public class CacheSample {
        public static void main(String[] args) {
            new CacheSample();
            //将数据从Redis中提取出来
            System.out.println("请输入要查询对商品编号:");
            String goodsId = new Scanner(System.in).next();
            Jedis jedis = new Jedis("192.168.77.129",6379);
            try{
                jedis.select(3);
                String key = "goods:"+goodsId;
                if(jedis.exists(key)){
                    String json = jedis.get(key);
                    Goods goods = JSON.parseObject(json,Goods.class);
                }else{
                    System.out.println("不存在该商品编号");
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                jedis.close();
            }
        }
        public CacheSample(){
            Jedis jedis = new Jedis("192.168.77.129",6379);
             try{
                 //将数据存储到redis中
                 List<Goods> goodsList = new ArrayList<>();
                 goodsList.add(new Goods(8800,"苹果","",3.5f));
                 goodsList.add(new Goods(8801,"橙子","",5f));
                 goodsList.add(new Goods(8802,"香蕉","",2f));
                 jedis.select(3);
                 for(Goods goods:goodsList){
                     String json = JSON.toJSONString(goods);
                     String key = "goods:"+goods.getGoodsId();
                     jedis.set(key,json);
                 }
             }catch (Exception e){
                e.printStackTrace();
            }finally {
                jedis.close();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    Redis持久化策略:
    Redis持久化策略,将数据持久化到磁盘上,当启动Redis后可以从磁盘将数据加载到内存中,然后在内存中读取数据。
    实现Redis持久化策略的方式:
    1.RDB(数据快照模式),定期存储,保存的是数据本身,当服务器启动时,可以从RDB文件中恢复数据集。
    2.AOF(追加模式),每次修改数据时,同步到硬盘(写操作日志),保存的是数据的变更记录。在服务器重启时,会把所有的写操作重新执行一遍,实现数据备份,当写操作集过大时,Redis会重写写操作集。

    zrange和zrangebyscore:
    在这里插入图片描述

    jedis连接失败时:

    • 解除保护模式:redis.conf文件中,设置protected-mode no
    • 关闭防火墙:systemctl stop firewalld.service

    Redis作为内存数据库,读取写入的速度非常快,经常用来存储数据、页面等缓存内容。
    Mysql和Redis在处理大量读取数据操作时,一般需要配合使用,如获取大量帖子或新闻,就可以使用Redis将MySQL中的数据获取到,然后直接从Redis中读取数据,效率比较快。

  • 相关阅读:
    【NSArray数组的遍历 Objective-C语言】
    SpringBoot的excel模板导出
    CISP-PTE实操练习题讲解一(新版)
    C++友元
    释放数字生产力 引领数字化转型新纪元——弘玑Cyclone 2022产品发布会圆满落幕
    外部中断1电下降沿平触发
    Hadoop大数据技术详解
    Prometheus基于Consul的 Redis 多实例监控方案
    C++函数指针接lambda原理
    M1 Pro MacBook Pro下载Android11源码
  • 原文地址:https://blog.csdn.net/nefss_/article/details/134037523