• redis数据结构基本语法


    Redis Study

    学到技巧

    快捷键

    ctrl + [

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

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

    经验

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

    the basic grammar of redis

    String类型

    • Switching databases(切换数据库)

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

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

      move key1 1
      

      image-20220919185425409

    • Clearing the database(清空数据库)

    1. flushall
      
    2. flushdb
      

    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
        

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

      2. netstat -tunlp | grep 8080
        

        参数说明如下

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

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

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

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

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

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

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

      dbsize
      

      测试代码段

      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   
        
      2. 不存在就赋值

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

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

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

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

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

        获取到对应键的值

        get user:1
        
      6. 取值赋值

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

        strlen hello
        
      8. 获取所有的键

        keys *
        
      9. 删除key

        del  hello
        
      10. 判断键是否存在

        exists hello
        
      11. 自增

        自增单位1(incr)

        先设定一个数字的值

        set num 1
        

        让这个数字的值自增

        incr num
        

        再重新获取到这个值

        get num
        

        image-20220919185443479

        自增设置步长(incrby)

        incrby num 10
        

        自减(decr)

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

        getrange hello 0 -1
        

        image-20220914212933164

      13. 指定索引位置替换

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

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

        ttl hello
        

        image-20220919185524914

    List 类型

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

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

    相关的命令

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

      lpush list one two three
      

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

      lrange list 0 -1
      

      image-20220915145927715

    • 还可与从右边进行push

      rpush list 2 3 4
      

      获取到值

      lrange list 0 -1
      

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

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

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

      linsert list before 2 1
      

      image-20220919185602166

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

      lset list 0 one
      
      

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

      • 索引范围取值

      lrange list 0 -1

      
      *  获取指定索引的值
      
      ```redis 
      lindex list 0
      

      image-20220919185716577

      • 获取列表的长度

      llen list

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

      image-20220915155911882

      • 移除操作

        从左边进行移除

      lpop

      
      从右边移除
      
      ```redis
      rpop 
      

      image-20220919185749643

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

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

      lrem list 2 4

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

      image-20220919185822311

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

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

      rpoplpush list list2
      

      image-20220919185837598

    set(无序不重复集合)

    • 基本的一些语法

      set集合添加元素

      sadd set set1
      sadd set set2
      

      查看集合当中存放的元素

      smembers set
      

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

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

      sismember set hello
      

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

      scard set
      

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

      srandmember set
      

      集合运算逻辑

      • 1 求两个集合的差集

        sdiff set1 set2
        

        image-20220919185950764

      • 2 求两个集合的交集

        sinter set1 set2
        

        image-20220919190003170

      • 3 求两个集合的并集

        sunion set1 set2
        

        image-20220919190012650

    • 删除元素

      srem set1 hello
      
    • 删除随机元素

      spop set1
      

      image-20220919190025317

    • 移动元素

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

      smove  set1 set name
      

    哈希

    提供思维的理解图

    image-20220919190036076

    哈希赋值

    • 单个哈希赋值
    hset hash f1 sail
    

    获取到键对应的值

    • hget hash f1
      
    • 多个hash赋值

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

      hsetnx hash f4 1
      
    • 自增

      自增1

      hincrby hash f3 1
      

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

    • 取值

      hget hash f1
      
    • 取多个键值

      hmget hash f1 f2
      
    • 取到所有的值

      hgetall hash
      
    • 取到所有的键

      hkeys hash
      
      
    • 取到所有的值

      hvals hash
      
    • 获取长度

    hlen hash
    
    • 判断字段是否存在

      hexists hash f1
      
    • 删除字段

    hdel hash f1
    

    zset

    思维图

    image-20220919175212628

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

    相比set,zset变得有序。

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

    • 赋值
    zadd set1 1 one 2 two 3 three
    
    

    image-20220919190053883

    • 取值(取所有的值)

      zrange set1 0 -1
      

      image-20220919190103271

    • 倒序取值

    zrevrange set1 0 -1
    

    image-20220919190113850

    • 统计元素到的个数
    zcard set1
    

    image-20220919190125372

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

      • 正序排列

        zrangebyscore set1 -inf +inf
        

        image-20220919190135888

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

         zrangebyscore set1 -inf 2
        

        image-20220919190151073

      • 排序限定结果条数

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

         zrangebyscore set1 -inf 2 limit 0 2
        
        

        image-20220919190205782

      • 排序附带分数

        zrangebyscore set1 -inf +inf withscores
        

        image-20220919190216266

      • 倒序

        zrevrangebyscore

        语法格式一样

      • 删除元素

        • 删除指定的元素

          zrem set1 three
          

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

  • 相关阅读:
    elementui el-date-picker禁止选择今年、今天、之前、时间范围限制18个月
    【待解决】Not a Prefab scene
    搭建Hyperledger Fabric2.x环境
    算法基础知识
    OpenTitan- 开源安全芯片横空出世
    Hotspot启动原理(二)
    springboot毕设项目大学生创新创业项目管理60qsr(java+VUE+Mybatis+Maven+Mysql)
    涂鸦电工产品开发包如何使用
    气象站有什么用?有哪些类型
    Google Earth Engine(GEE)——用不同方法计算slope对比案例分析
  • 原文地址:https://blog.csdn.net/jgdabc/article/details/126939712