redis数据结构基本语法

举报
兰舟千帆 发表于 2022/09/25 07:08:54 2022/09/25
【摘要】 Redis Study 学到技巧 快捷键 ctrl + [ typora很好用,有个问题就是换行会自动跟上面的格式,按删除键也无效 ctrl + [就会把前面的格式给稀释掉。 经验 有关ty...

Redis Study

学到技巧

快捷键

ctrl + [

typora很好用,有个问题就是换行会自动跟上面的格式,按删除键也无效

ctrl + [就会把前面的格式给稀释掉。

经验

有关typora上传博客园图片缩放的问题,办法就是在typora中粘贴图片以后发现缩放没有效果,然后就是去先点击缩放一下,然后就会出现style字段样式,这里指定的是zoom,我们把它改成width ,height这样的样式就可以起到效果。

the basic grammar of redis

String类型

  • Switching databases(切换数据库)

    select 1 
    
    
        
       
    • 1
    • 2
  • 将值移动到其它数据库

    将key这个键移动到一号数据库

    move key1 1
    
        
       
    • 1

    image-20220919185425409

  • Clearing the database(清空数据库)

  1. flushall
    
        
       
    • 1
  2. flushdb
    
        
       
    • 1

1、flushAll 清空数据库并执行持久化操作,也就是RDB文件会发生改变,变成76个字节大小(初始状态下为76字节),所以执行flushAll之后数据库真正意义上清空了。

2、flushDB 清空数据库,但是不执行持久化操作,也就是说RDB文件不发生改变.而redis的数据是从RDB快照文件中读取加载到内存的,所以在flushDB之后,如果想恢复数据库,则可以直接kill掉redis-server进程,然后重新启动服务,这样redis重新读取RDB文件,数据恢复到flushDB操作之前的状态。

注意:要直接kill 掉redis-server服务,因为shutdown操作会触发持久化。

  • 查看端口占用

    1. lsof(list open files )

      lsof -i : 6379
      
            
           
      • 1

      lsof -i 需要 root 用户的权限来执行

    2. netstat -tunlp | grep 8080
      
            
           
      • 1

      参数说明如下

      -t (tcp) 仅显示tcp相关选项

      -u (udp)仅显示udp相关选项

      -n 拒绝显示别名,能显示数字的全部转化为数字

      -l 仅列出在Listen(监听)的服务状态

      -p 显示建立相关链接的程序名

  • 查看数据库当中所有的键

    keys *
    
        
       
    • 1
  • 查看当前数据库的大小

    dbsize
    
        
       
    • 1

    测试代码段

    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> dbsize
    (integer) 0
    127.0.0.1:6379[1]> set 2 3
    OK
    127.0.0.1:6379[1]> dbsize
    (integer) 1
    127.0.0.1:6379[1]>

  • 一些与键值有关的命令

    1. 一般赋值

      set hello helloword   
      
            
           
      • 1
    2. 不存在就赋值

      setnx hello helloword
      
            
           
      • 1
    3. 进行批量的赋值

      mset key1 value1 key2 value2 
      
            
           
      • 1
    4. 原子性的批量赋值

      原子性的批量赋值的特点就是这些多个赋值之中,如下,结合不存在这种赋值的话,也就是当这种多个赋值之中,有的已经存在了,那么就不会进行赋值成功,那么另外一个页不会成功,这里类似sql中的事务

      msetnx hello helloword hello3 helloword3
      
      
            
           
      • 1
      • 2
    5. 设置对象类型的赋值

      set user:1 {name:sail,age:27}
      set user:2 {name:hello,age:28}
      
            
           
      • 1
      • 2

      获取到对应键的值

      get user:1
      
            
           
      • 1
    6. 取值赋值

      getset hello "nice to meet you"
      
            
           
      • 1
    7. 获取键对应的长度

      strlen hello
      
            
           
      • 1
    8. 获取所有的键

      keys *
      
            
           
      • 1
    9. 删除key

      del  hello
      
            
           
      • 1
    10. 判断键是否存在

      exists hello
      
            
           
      • 1
    11. 自增

      自增单位1(incr)

      先设定一个数字的值

      set num 1
      
            
           
      • 1

      让这个数字的值自增

      incr num
      
            
           
      • 1

      再重新获取到这个值

      get num
      
            
           
      • 1

      image-20220919185443479

      自增设置步长(incrby)

      incrby num 10
      
            
           
      • 1

      自减(decr)

      decr num1
      
            
           
      • 1
    12. 截取键索引范围字段

      getrange hello 0 -1
      
            
           
      • 1

      image-20220914212933164

    13. 指定索引位置替换

      setrange hello 2 r
      
            
           
      • 1
    14. 设置过期时间

      setex hello 60 "hello word"
      
            
           
      • 1
    15. 查看过期时间

      ttl hello
      
            
           
      • 1

      image-20220919185524914

List 类型

redis这里这个类型其实可以认为是一个双端队列

所有的list命令都是以l开头

相关的命令

  • 从左边插入,相当于从双端对比、列额左边插入到列表的头部可以插入多个值

    lpush list one two three
    
        
       
    • 1

    这样插入的话再从一个方向获取值的话就是按照先进后出的规则

    lrange list 0 -1
    
        
       
    • 1

    image-20220915145927715

  • 还可与从右边进行push

    rpush list 2 3 4
    
        
       
    • 1

    获取到值

    lrange list 0 -1
    
        
       
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6JDIh68-1663585401083)(https://img2022.cnblogs.com/blog/2145006/202209/2145006-20220919185537039-353541965.png)]

​ 这样从右边push进去的话,然后lrange 取得话,就会变成先进先出了。这里可以理解为从右边进的话,其实还是lrange还是从左边取,这样就可以发现符合这样的规律。

  • 还可以给元素的前后进行插入赋值

    linsert list before 2 1
    
        
       
    • 1

    image-20220919185602166

    linsert list after 4 5
    
        
       
    • 1
    image-20220915153436256
  • 元素指定下标进行赋值

    lset list 0 one
    
    
        
       
    • 1
    • 2

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBv4RNFl-1663585401084)(https://img2022.cnblogs.com/blog/2145006/202209/2145006-20220919185606817-2095471764.png)]

    • 索引范围取值

      
            
           

      lrange list 0 -1

      
      *  获取指定索引的值
      
      ```redis 
      lindex list 0
      
          
         
      • 1
      • 2
      • 3
      • 4
      • 5

      image-20220919185716577

      • 获取列表的长度

        
              
             

        llen list

        
        ![image-20220919185734415](https://img-blog.csdnimg.cn/img_convert/682751a20f79736dcd1d10e4c881614d.png)
        
        * 判断列表是否存在
        
        ```redis
        exists list
        
            
           
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7

        image-20220915155911882

        • 移除操作

          从左边进行移除

          
                
               

          lpop

          
          从右边移除
          
          ```redis
          rpop 
          
              
             
          • 1
          • 2
          • 3
          • 4
          • 5

          image-20220919185749643

          • 一次移除多个元素(需要指定元素移除)

            这种情况出现在list里面存在重复元素的时候,一次可以指定移除多个这样的元素

            
                  
                 

            lrem list 2 4

            
            ![image-20220919185801334](https://img-blog.csdnimg.cn/img_convert/d61b2be3b765c9d879644e453a8e750e.png)
            
            *  `截取指定索引范围当中的元素(这样的截取其实就是类似于一次lpop掉多个元素)
            
            ```redis
            ltrim list 0 -1
            
                
               
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7

            image-20220919185822311

            • 移除最后一个元素到新的列表当中

            这里其实将列表中头部的元素push到另外的一个列表当中

            rpoplpush list list2
            
                
               
            • 1

            image-20220919185837598

          set(无序不重复集合)

          • 基本的一些语法

            set集合添加元素

            sadd set set1
            sadd set set2
            
                
               
            • 1
            • 2

            查看集合当中存放的元素

            smembers set
            
                
               
            • 1

            判断集合当中的元素是否存在

            存在返回1,不存在返回0

            sismember set hello
            
                
               
            • 1

            计算出集合当中的元素个数

            scard set
            
                
               
            • 1

            查找出集合当中随机的一个元素

            srandmember set
            
                
               
            • 1

            集合运算逻辑

            • 1 求两个集合的差集

              sdiff set1 set2
              
                    
                   
              • 1

              image-20220919185950764

            • 2 求两个集合的交集

              sinter set1 set2
              
                    
                   
              • 1

              image-20220919190003170

            • 3 求两个集合的并集

              sunion set1 set2
              
                    
                   
              • 1

              image-20220919190012650

          • 删除元素

            srem set1 hello
            
                
               
            • 1
          • 删除随机元素

            spop set1
            
                
               
            • 1

            image-20220919190025317

          • 移动元素

            将set1 集合当中的name移动到set集合当中

            smove  set1 set name
            
                
               
            • 1

          哈希

          提供思维的理解图

          image-20220919190036076

          哈希赋值

          • 单个哈希赋值
          hset hash f1 sail
          
            
           
          • 1

          获取到键对应的值

          • hget hash f1
            
                
               
            • 1
          • 多个hash赋值

            hset hash f1 sail f2 sail1
            
                
               
            • 1
          • 不存在才赋值

            hsetnx hash f4 1
            
                
               
            • 1
          • 自增

            自增1

            hincrby hash f3 1
            
                
               
            • 1

            设置自减的时候只需要将后面的数值设置为负数就可以

          • 取值

            hget hash f1
            
                
               
            • 1
          • 取多个键值

            hmget hash f1 f2
            
                
               
            • 1
          • 取到所有的值

            hgetall hash
            
                
               
            • 1
          • 取到所有的键

            hkeys hash
            
            
                
               
            • 1
            • 2
          • 取到所有的值

            hvals hash
            
                
               
            • 1
          • 获取长度

          hlen hash
          
            
           
          • 1
          • 判断字段是否存在

            hexists hash f1
            
                
               
            • 1
          • 删除字段

          hdel hash f1
          
            
           
          • 1

          zset

          思维图

          image-20220919175212628

          zset是set的有序集合,set集合是无序不重复的,zset是有序不重复。

          相比set,zset变得有序。

          添加一个键的时候会对应一个值,二值对应的会有数字。这些数字其实就是可以作为排序的条件。

          • 赋值
          zadd set1 1 one 2 two 3 three
          
          
            
           
          • 1
          • 2

          image-20220919190053883

          • 取值(取所有的值)

            zrange set1 0 -1
            
                
               
            • 1

            image-20220919190103271

          • 倒序取值

          zrevrange set1 0 -1
          
            
           
          • 1

          image-20220919190113850

          • 统计元素到的个数
          zcard set1
          
            
           
          • 1

          image-20220919190125372

          • 指定区间查看元素数量
          zrange set1 0 -1
          
            
           
          • 1
          • 进行排序

            • 正序排列

              zrangebyscore set1 -inf +inf
              
                    
                   
              • 1

              image-20220919190135888

            • 从负无穷排序到指定的数字

               zrangebyscore set1 -inf 2
              
                    
                   
              • 1

              image-20220919190151073

            • 排序限定结果条数

              从负无穷排序到2,然后限定条数是0~2条

               zrangebyscore set1 -inf 2 limit 0 2
              
              
                    
                   
              • 1
              • 2

              image-20220919190205782

            • 排序附带分数

              zrangebyscore set1 -inf +inf withscores
              
                    
                   
              • 1

              image-20220919190216266

            • 倒序

              zrevrangebyscore

              语法格式一样

            • 删除元素

              • 删除指定的元素

                zrem set1 three
                
                        
                       
                • 1

                [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WRy9bbTd-1663585401096)(C:/Users/jgdabc/AppData/Roaming/Typora/typora-user-images/image-20220919190226560.png)]

          文章来源: daodaozi.blog.csdn.net,作者:兰舟千帆,版权归原作者所有,如需转载,请联系作者。

          原文链接:daodaozi.blog.csdn.net/article/details/126939712

          【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
          • 点赞
          • 收藏
          • 关注作者

          评论(0

          0/1000
          抱歉,系统识别当前为高风险访问,暂不支持该操作

          全部回复

          上滑加载中

          设置昵称

          在此一键设置昵称,即可参与社区互动!

          *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

          *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。