zoukankan      html  css  js  c++  java
  • Redis 基本数据类型

    1、简介

      redis是一款菲关系型数据库(Not Only SQL ),是对关系型数据库做补充。这是一种基于内存的数据库,用于应对基于海量用户和海量数据前提下的数据处理问题。

      因为磁盘读/写速度比较慢的问题,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。

    2、特征

    • 数据间没有必然的关联关系;
    • 内部采用单线程机制进行工作;
    • 高性能;
    • 多数据类型支持:string、hash、list、set、sorted_set和hyperLogLog;
    • 持久化支持,可以进行数据灾难恢复;

    3、数据类型

      3.1 string 常见操作

    #新增
    set key value
    
    #新增多个
    mset key1 value1 [key2 value2]
    
    #删除
    del key
    
    #追加值到原始值后面,不存在就新增
    append key value
    
    #读取
    get key
    
    #获取值长度
    strlen key

    =============扩展操作============
    #对value为数值的key自增自减操
    incr key //value+1
    incrby key increment //指定value+increment
    incrbyfloat key increment

    decr key
    decrby key increment

    #设置key的有效期
    setex key seconds value //指定秒数
    psetec key milliseconds value //指定毫秒数

      3.2 list 常见操作

        简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

    ===========普通操作=============
    #添加、修改
    lpush key value1 [value2...]
    rpush ...
    
    #移除并返回结果
    lpop key    //左边删除一个
    rpop key    //右边删除一个
    lrem key count value    //删除指定数量的value
    
    #获取数据
    lrange key start end //获取下标start到end的值,end = -1为最后
    lindex key index
    
    #获取长度
    llen key

    ============扩展操作=============
    #阻塞式删除操作,如有有值立即执行,没有值会等timeout秒,还没有就返回(nil)
    blpop key1 [key2] timeout
    brpop ...

        业务场景:关注列表。。。

      3.3 hash 常见操作

        是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

    ========普通操作=========
    #新增
    hset key field value
    hmset key field1 value1 [field2 value2]
    
    #删除key中field
    hdel key field1 [field2]
    
    #获取
    hget key field 
    hmget key field1 [field2]
    
    #获取长度
    hlen key
    
    #判断field是否存在
    hexists key field
    
    ========扩展操作==========
    #获取key的所有field和value
    hkeys key
    kvals key

    #值的增量操作
    hincrby key field increment
    hincrbyfloat key field increment

    #存在field不插入,不存在插入
    hsetnx key field value

        注意事项:

        • value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象;
        • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性;
        • hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率会很低,最好只查要的数据;

        业务场景:限量促销数据存储。。。

      3.4 set 常见操作

        是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

    =========普通操作==========
    #新增
    sadd key member1 [member2]
    
    #删除
    srem key member
    
    #获取
    smembers key
    
    #获取数量
    scard key
    
    #判断member是否存在
    sismember key member
    
    ========扩展操作========
    #随机获取member
    srandmember key [count] //默认1个

    #随机获取member并从集合中删除
    spop key [count]

    #获取集合间的交、差、并集
    sinter key1 [key2...] //交集
      sinterstore destination key1 [key2...]  //获取交集并存到指定集合中
    sdiff key1 [key2...]  //差集
      sdiffstore destination key1 [key2...]  //获取差集并存到指定集合中
    sunion key1 [key2...]  //并集
      sunionstore destination key1 [key2...]  //获取并集并存到指定集合中
    #将指定数据从原始集合中移动到目标集合中
    smove source destination member

        注意事项:不允许数据重复;

        应用场景:统计网站访问量、随机推荐、黑白名单。。。

      3.5 sorted_set 常见操作

        有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

    ======普通操作======
    #新增
    zadd key score1 member1 [...]
    
    #删除
    zrem key member
    zremrangebyrank key start end //包含start和end   
    zremrangebyscore key min max
    
    #获取
    zrange key start end [withscores] 
    zrevrange ...
    zrangebyscore key min max [withscores]
    zrevrangebyscore ...
    
    #获取总数
    zcard key
    zcount key min max    //通过socre去统计
    
    #交并集操作
    zinterstore destination numkeys key1 [key2...] //必须指定几个集合操作
    zunionstore ...
    
    ========扩展操作========
    #获取数据对应的索引
    zrank key member
    zrevrank key member

    #score值获取与修改
    zscore ket member
    zincrby key increment member

        业务场景:投票、评选。。。

      3.6 HyperLogLog

        在 2.8.9 版本添加了 HyperLogLog 结构。 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

        每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

      什么是基数?

      比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

      

    #新增
    pfadd key element1 [element2...]
    
    #获取基数估算值
    pfcount key1 [key2...]
    
    #合并
    pfmerge destkey sourcekey1 [sourcekey2...]

    4、key通用命令

    #删除key
    del key
    
    #获取key类型
    type key
    
    #判断key是否存在
    exists key
    
    #设置key有效期
    expire key seconds
    pexpire key millisecondes 
    expireat key timestamp
    pexpirear key milliseconds-timestamp
    
    #获取key有效时间
    ttl key
    pttl key
    
    #切换key从时效性转为永久性
    persist key
    
    #查找key
    keys pattern
        *    匹配任意数量的字符
        ?    匹配一个字符
        []   匹配范围内的字符
    
    #修改key
    rename key newkey
    renamenx key newkey //仅当 newkey 不存在时,将 key 改名为 newkey 
    
    #排序
    sort key //可以对list、set和sorted set的元素进行排序,然后显示排序的结果,不影响这些类型里面存储的数据的排序,默认asc

    5、数据库命令

      一共有16个数据库,0~15,默认在0号数据库

    #切换数据库
    select index
    
    #数据移动数据库
    move key db
    
    #数据清除
    dbsize    查看key的数量
    flushbd    删除本数据库内容
    flushall    删除所有数据
    
    #其他操作
    quit    退出
    ping    测试服务是否连通
    echo message    打印内容到控制台
  • 相关阅读:
    [ Docker ] 基础安装使用及架构
    [ Docker ] 基础概念
    Nginx
    ELK
    SVN + Jenkins 构建自动部署
    Zabbix
    ELK
    ELK 部署文档
    vue.js在visual studio 2017下的安装
    vue.js是什么
  • 原文地址:https://www.cnblogs.com/xp2h/p/12449866.html
Copyright © 2011-2022 走看看