redis数据结构基本语法

举报
兰舟千帆 发表于 2022/09/25 07:08:54 2022/09/25
6.7k+ 0 0
【摘要】 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
        
       
  • 将值移动到其它数据库

    将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)]

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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