redis学习笔记-1

redis学习笔记

1.概念

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

  • 关系型数据库:

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AETyQ1r-1607181708495)(/Users/wangzhili/Library/Application Support/typora-user-images/image-20201201235813967.png)]

综上所述:利用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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jFuKdLRO-1607181708497)(/Users/wangzhili/Library/Application Support/typora-user-images/image-20201202005457014.png)]

  • 客户端操作: 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

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

        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOd7a3lW-1607181708498)(/Users/wangzhili/Library/Application Support/typora-user-images/image-20201202231511297.png)]

        • 将配置文件中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();
      }
      
      
    • 连接池配置相关信息
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Xiy5FY9-1607181708500)(/Users/wangzhili/Library/Application Support/typora-user-images/image-20201203220011275.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值