redis学习笔记-1

redis学习笔记

1.概念

​ redis是一款高性能的NOSQL系列的非关系型数据库

  • 关系型数据库:

    • 1-数据之间有关联关系
    • 2-数据存储在硬盘文件上面
  • 非关系型数据库:

    • 1-数据质检没有关系
    • 2-数据存储在内存中

redis学习笔记-1_第1张图片

综上所述:利用redis做缓存,提高数据查询的效率。

  • 补充:redis是用c语言开发的一个开源的高性能键值对key-value数据库,redis支持的键值数据类型

    • 1-string:常用
    • 2-hash:map
    • 3-list: ArrayList/LinkedList
    • 4-set: HashSet
    • 5-sortedset(有序集合类型):有序无重复
  • 应用场景:

    • 缓存(数据查询、短连接、新闻内容、商品内容等)
    • 聊天在线好友列表
    • 任务队列(秒杀、抢购、12306等)
    • 应用的排行榜
    • 网站的访问统计
    • 数据过期处理(可以精确到毫秒)
    • 分布式集群架构中的session分离

redis官网:https://www.redis.net.cn/

  • 安装过程:
    • 解压:tar zxvf redis-6.0.9.tar.gz
    • 移动到:sudo mv redis-6.0.9 /usr/local
    • 切换到:cd /usr/local/redis-6.0.9/
    • 编译测试:make test
    • 编译安装:make install
    • 启动服务:redis-server

  • 客户端操作: redis-cli

    出现上方左图,说明可以在客户端交互式的使用redis的一些命令,可以输入shutdown关闭服务端,exit退出

2.命令操作

​ 1)数据结构

​ redis存储的是key-value格式的数据,key是字符串,value有5种不同的数据结构

​ 2)字符串类型:string

  • 存储: set key value
  • 获取: get key
  • 删除: del key

​ 3) 哈希类型:Hash

  • 存储: hset key field value
  • 获取: hget key field
  • 获取所有:hgetall key
  • 删除: hdel key field

​ 4) 列表类型:List

  • 左存储: lpush key value
  • 右存储: rpush key value
  • 范围获取 :lrange key start end
  • 左删除: lpop key(删除列表最左边的元素,并将元素返回)
  • 右删除: rpop key(删除列表最右边的元素,并将元素返回)

​ 5) 集合类型:Set

  • 存储: sadd key value
  • 获取: smembers key (获取set集合中所有的元素) 获取的顺序与存入的顺序并不能保持一致
  • 删除: srem key value(移除集合中的某个元素)

​ 6) 有序集合类型:sortedset

  • 存储: zadd key score value 根据score的权值进行排序
  • 获取: zrange key start end
  • 删除: zrem key value(移除集合中的某个元素)

​ 7)通用命令

  • keys *(可以用正则表达式) 查询所有的key

  • type key 获取键对应的类型

  • del key 删除指定的key value

  • redis-server 开启redis服务

  • redis-cli 启动 redis 客户端

  • shutdown 关闭服务

3.持久化操作

  • redis是存放在内存中的数据库,不能长久储存,当redis服务器重启或者电脑宕机重启等数据会丢失,所以需要将内存中的数据持久化保存到硬盘文件中。

  • redis持久化机制 并不能保证绝对的安全,存在丢失数据的可能性

    • RDB:不需要配置,默认方式

      • 在一定的间隔时间中国,检测key的变化情况,然后持久化数据(推荐使用,不影响性能)

        • Windows中:编辑redis.windows.conf文件 ,命令:redis-server.exe redis.windows.conf

        • Mac:编辑redis.conf,命令:redis-server即可

          save 900 1
          save 300 10
          save 60 10000
          
          #   after 900 sec (15 min) if at least 1 key changed
          #   after 300 sec (5 min) if at least 10 keys changed
          #   after 60 sec if at least 10000 keys changed
          
    • AOF

      • 日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据

        • redis学习笔记-1_第2张图片

        • 将配置文件中no改为yes开启AOF持久化机制

        • # appendfsync always:每一次操作都进行持久化
          appendfsync everysec:系统默认,每隔一秒操作一次
          # appendfsync no:关闭aof机制
          

4.使用java客户端操作redis

  • Jedis:一款java操作redis数据库的工具

  • 使用步骤:

    • 下载jedis的相关jar包

      • commons-pool2-2.9.0.jar
      • jedis-3.3.0.jar
    • 使用

      	@Test
          public void test1(){
               
              //1.获取连接
              Jedis jedis = new Jedis("localhost",6379);
              //2.操作
              jedis.set("name","zhangsan");
              jedis.set("age","24");
              //3.关闭连接
              jedis.close();
          }
      
  • Jedis操作各种redis中的数据结构

    • 1-string:常用

      • set

      • get

            @Test
            public void test2(){
                   
                //1.获取连接
                Jedis jedis = new Jedis();//如果使用空参构造,默认localhost 6379
                //2.存储
                jedis.set("cCode","HelloWorld");
                jedis.set("cName","Java");
                //3.获取
                String cCode = jedis.get("cCode");
                String cName = jedis.get("cName");
        
                //可以使用setex()方法存储可以指定过期时间的key-value
                //将activeCode,tenSeconds键值对存入redis,并且10秒后自动删除该键值对
                jedis.setex("activeCode",10,"tenSeconds");
        
                System.out.println(cCode);
                System.out.println(cName);
                //4.关闭连接
                jedis.close();
            }
        
    • 2-hash:map

      • hset
      • hget
      /**
      * @decription: hash数据结构操作
      * @author:WZL 2020/12/3 7:51 下午
      **/
      @Test
      public void test3(){
               
          //1.获取连接
          Jedis jedis = new Jedis();//如果使用空参构造,默认localhost 6379
          //2.存储
      
          Map<String,String> data = new HashMap<String,String>();
          data.put("name","zhangsan");
          data.put("age","24");
          data.put("gender","male");
          jedis.hset("map",data);
      
          jedis.hset("user","name","zhangsan");
          jedis.hset("user","age","24");
          jedis.hset("user","gender","male");
          //3.获取
          String name = jedis.hget("map", "name");
          String name2 = jedis.hget("user", "name");
      
          System.out.println(name);
          System.out.println(name2);
      
          //4.获取全部
          Map<String, String> user = jedis.hgetAll("user");
      
          Set<String> keySet = user.keySet();
          for(String key : keySet){
               
              String value = user.get(key);
              System.out.println(key+"-----"+value);
          }
      
          //4.关闭连接
          jedis.close();
      }
      
      
    • 3-list: ArrayList/LinkedList

      • lpush/rpush
      • lpop/rpop
      /**
      * @decription: List数据结构操作
      * @author:WZL 2020/12/3 8:01 下午
      **/
      @Test
      public void test4(){
               
          //1.获取连接
          Jedis jedis = new Jedis("localhost",6379);
          //2.存储
          jedis.lpush("list","a","b","c");
          jedis.rpush("list","a","b","c");
          //3.获取
          List<String> list = jedis.lrange("list", 0, -1);
          System.out.println(list);
      
          //3-1.pop获取
          String s1 = jedis.lpop("list");
          System.out.println(s1);
          String s2 = jedis.lpop("list");
          System.out.println(s2);
          String s3 = jedis.lpop("list");
          System.out.println(s3);
      
          List<String> list1 = jedis.lrange("list", 0, -1);
      
          System.out.println(list1);
      
      
          //4.关闭连接
          jedis.close();
      }
      
      
    • 4-set: HashSet

      • sadd
      /**
       * @decription: Set数据结构操作
       * @author:WZL 2020/12/3 8:01 下午
       **/
      @Test
      public void test5(){
               
          //1.获取连接
          Jedis jedis = new Jedis("localhost",6379);
          //2.存储
          jedis.sadd("set","a","b","c","d");
      
          //3.获取
          Set<String> set = jedis.smembers("set");
          for(String value : set){
               
              System.out.println(value);
          }
      
          //4.关闭连接
          jedis.close();
      }
      
      
    • 5-sortedset(有序集合类型):有序无重复

      • zadd
      /**
       * @decription: sortedSet数据结构操作
       * @author:WZL 2020/12/3 8:01 下午
       **/
      @Test
      public void test6(){
               
          //1.获取连接
          Jedis jedis = new Jedis("localhost",6379);
          //2.存储
          jedis.zadd("color",10,"red");
          jedis.zadd("color",20,"green");
          jedis.zadd("color",5,"blue");
      
          //3.获取
          Set<String> colorSet = jedis.zrange("color", 0, -1);
          for(String color : colorSet){
               
              System.out.println(color);
          }
      
          //4.关闭连接
          jedis.close();
      }
      
      
  • Jedis连接池——JedisPool

    • JedisPool使用:

      • 创建JedisPool连接池对象
      • 调用方法 getResource()方法获取Jedis连接
      /**
      * @decription: JedisPool
      * @author:WZL 2020/12/3 8:49 下午
      **/
      @Test
      public void test7(){
               
          //0.创建配置对象
          JedisPoolConfig config = new JedisPoolConfig();
          config.setMaxTotal(50);//最大连接数
          config.setMaxIdle(10);//最大空闲连接
          //....
      
          //1.创建Jedis连接池对象
          JedisPool jedisPool = new JedisPool(config,"localhost",6379);
          //2.获取连接
          Jedis jedis = jedisPool.getResource();
          //3.存储
          jedis.set("name","zhangsan");
          //4.获取
          String name = jedis.get("name");
          System.out.println(name);
          //5.归还
          jedis.close();
      }
      
      
    • 连接池配置相关信息
      redis学习笔记-1_第3张图片

你可能感兴趣的:(学习笔记,redis,java)