zoukankan      html  css  js  c++  java
  • redis实战学习笔记一

    toc

    介绍

    以下是介绍基于官网介绍总结而来:
    redis是一个高效的基于内存的key-value数据库,可以用作数据库、缓存、消息代理,redis提供拥有8种数据结构,其中有基本类型5种:字符串string、哈希hash、列表list、集合set、有序集合zset,以及3种特殊类型:bitmap、hyperloglog、geospatial index、stream。redis具有内置的复制、lua脚本、lru淘汰、事务、不同级别磁盘持久化、通过哨兵sentinel和自动分区cluster提供高可用性。

    与其他数据库对比

    基本数据类型简介

    字符串

    介绍

    redis字符串是由字节组成的序列,redis字符串能存储:
    1. 字节串(字节数组)
    2. 整数(取值范围与系统长整型相同,有需要时整数会转换为浮点)
    3. 浮点(IEEE54标准双精度浮点double)

    常用命令

    获取、设置、删除


    自增自减

    • 当用户存储的字符串可被解释为十进制整数或浮点数时,用户可以对字符串进行incr和decr操作
    • 当用户对不存在的或保存了空串的执行自增或自减操作。键对应的值会被初始化0,再进行自增或自减
    • 当被自增或自减操作的字符串无法被解释为整数或浮点时,redis将返回一个错误

      子串、二进制处理
      redis支持对字节串中的某一部分内容进行读取或写入

      命令补充
    命令 描述补充
    append 当key不存在时,append相当于set;返回值为追加后字符串的长度
    getrange 当key不存在或start大于end或start超出范围时,返回空串;start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;取值时包括start与end在内;start在范围内,end在范围外时,返回start到末尾元素组成的子串
    setrange 当offset大于原字符串长度度时,会以'x00'填充;返回值为操作后字符串长度
    getbit 当key不存在或offset大于字符串长度时,返回0
    setbit 当key不存在时,会生成一个长度大于offset的新串,再在offset处进行set,offset外的位置被填充为0;offset大于原串时会自动扩容,offset外的位置被填充为0;返回原串offset存储的位
    bitcount start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;取值时包括start与end在内; 当key不存在或start大于end时或start超出范围时,返回0;start范围内,end范围外,返回start到末尾的二进制1
    bitop 当运算时not只能接受一个key(ERR BITOP NOT must be called with a single source key),当与空串或较短的串做运算时,缺少的部分被视作0;返回值为dest-key的长度(字符个数,非二进制个数)




    列表

    介绍

    redis中的列表是字符串列表,用户存储多个字符串,存储的字符串可以相同
    列表允许用户从序列的两端推入或者弹出元素、获取元素,执行各种常见的列表操作

    常用命令

    增删查

    命令补充

    命令 描述补充
    rpush/lpush 当可以不存在时,会创建一个空列表后再执行操作,返回添加后列表元素个数
    rpop/lpop key不存在时,返回nil
    lindex key不存在时或index超出范围时,返回nil,index为-1表示最后一个元素
    lrange 当key不存在或start大于end或start超出列表范围时,返回空列表;start与end为负表示从后往前数;取值时包括start与end在内;start在范围内,end在范围外时,返回start到末尾的元素
    ltrim 当start大于end或start超出范围时,列表将会被清空;start与end为负表示从后往前数;start在范围内,end在范围外时,保留start到末尾的元素





    阻塞式弹出、在列表间移动元素
    对于阻塞弹出命令和弹出并推入命令,最常见的用例就是消息传递(messaging)和任务队列(task queue)的开发

    命令补充

    命令 描述补充
    blpop/rpop 全部key都不存在时,将被阻塞到超时,并返回nil,或阻塞到其他客户端往等待的key推入数据;等待成功返回含弹出元素的key以及被弹出元素的列表
    rpoplpush 为原子指令,如果source不存在,返回nil并不会执行任何操作;如果source与dest相同,表尾的元素将会移动到表头


    集合

    介绍

    redis中的集合以无序的方式来存储各不相同的字符串,通过hash保证存储的字符串唯一,集合中存储的元素只有键(member)没有值
    用户可以快速地对集合执行添加元素、移除元素以及检查一个元素是否存在于集合里的操作,或查看集合中所有的元素,以及对多个集合执行交集运算、并集运算和差集运算
    注:查看集合中所有元素的smembers命令在元素多的时候很慢,慎用

    常用命令

    增删查

    命令补充

    命令 描述补充
    sadd 当key不存在时,会创建一个集合;当集合中存在item时,item将会被忽略
    sismember item存在于集合key时,返回1,key不存在或item不在key中返回0
    spop 当key不存在或key为空集合时,返回nil
    smove 原子指令;当source不包含item时,不会执行任何操作,并返回0;当dest已经含item时,移除source中的item,返回1



    交集、并集、差集计算
    先来个图复习下概念


    命令补充

    命令 描述补充
    sdiff 不存在的key会被视为空集合
    sdiffstore 不存在的key会被视为空集合;如果dest已经存在,则新结果将覆盖dest;dest可以是 key本身;返回值为dest中元素个数
    sinter 不存在的key视为空集合
    sinterstore 不存在的key视为空集合;若dest存在则被覆盖;dest可以是key本身;返回dest元素个数
    sunion 不存在的key视为空集合
    sunionstore 不存在的key视为空集合;若dest存在则被覆盖;dest可以是key本身;返回dest元素个数



    哈希表

    介绍

    哈希表存储多个键值对(或者说域-值对)的映射,在键值对中,键是唯一的,值可以是字符串或数值,非常适用于将一些相关的数据存储在一起

    常用命令

    增删查改


    命令补充

    命令 描述补充
    hget/hmget 若key不存在或field不存在,返回nil;hmget返回序号(1开始)与field对应的value
    hset/hmset 若key不存在将会创建一个哈希表,再执行操作;当field已存在,对应的value将会被覆盖;新域值对关联成功,hset返回1,hmset返回ok,域值对被更新,hset返回0,hmset返回ok
    hlen key不存在返回0
    hgetall 返回值以field、value形式排列,返回长度为2倍hlen





    高级查改

    命令补充

    命令 描述补充
    hexists key不存在或field不存在,返回0,否则返回1
    hkeys/hvals 当key不存在返回空hash表
    hgetall 返回值以field、value形式排列,返回长度为2倍hlen
    hincrby 增量为负可做减法;若key不存,则创建hash表再执行操作;如field不存在,创建field-value关联,并初始value为0,再执行操作;field对应的value必须为整数,浮点都不行;返回操作后的value
    hincrbyfloat 增量为负可做减法;若key不存,则创建hash表再执行操作;如field不存在,创建field-value关联,并初始value为0,再执行操作;field对应的value必须可以解释为浮点;返回操作后的value

    如果哈希表包含的域值对非常多,应该先使用hkeys取出全部field,再通过hget一个个取出值,避免一次性取出太多数据阻塞redis server

    有序集合

    介绍

    有序集合存储成员与分值的映射,分值是浮点类型,成员必须唯一,分值可以重复,有序集合根据分值大小,从小到大排序,有序集合时redis中唯一既可以通过成员访问元素,又可以通过分值及分值的排列顺序来访问元素的结构

    常用命令

    增删查改

    命令补充

    命令 描述补充
    zadd key不存在则创建空有序集合再执行操作,返回新添加个数;member已存在,则更新对应score值,并更新member的排名,返回0
    zincrby 增量为负可做减法;若key或member不存在时,类似zadd的行为,只是返回值有区别;socre必须可解释为浮点类型;score变化时,member的排序名也会进行相应变动;返回新socre
    zcount 计数时包含score等于min与max的成员
    zrank 最小rank为0;当member不在有序集合key中时,返回nil
    zscore 当member不在有序集合key中时,返回nil
    zrange 相同score的member按字典序排列;当key不存在或start大于end或start超出范围时,返回空列表;start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;取值时包括start与end在内;start在范围内,end在范围外时,返回start到末尾的列表






    范围型数据获取、删除、并集、交集

    命令补充

    命令 描述补充
    zrevrank 与zrank相差无几,只是排序方式相反
    zrevrange 与zrange相差无几,只是排序方式相反
    zrangebyscore 与zrange相似,只是由判断index变成了score,可选参数limt offset count 与某些sql一致,min与max可以是-inf与+inf;可以使用左括号(来将闭区间变为开区间
    zremrangebyrank 当key不存在或start大于end或start超出范围时,返回0;start与end可以为负,表示从后往前数,-1为最后一个字符,-2为倒数第2个...;删除时包括start与end在内;start在范围内,end在范围外时,删除start到末尾的列表;返回成功删除的个数
    zinterstore/zunionstore key的数量必须由key-count指定;交/并集结果被存到dest,dest存在则被覆盖;可与set一起使用,set的score视为1;可选weight表做交/并集之前各keyscore的扩大倍数,aggregate表结果集中的score是全部key之和或是最大/小score;返回dest个数


    并集、交集计算图例:
    aggregate为sum:

    aggregate为min:





    原创不易,转载请注明出处,谢谢
  • 相关阅读:
    Armbian hostname and WiFi configuration
    尼采的哲学
    深度学习 —— 使用 gensim 实现 word2vec
    sklearn preprocessing 数据预处理(OneHotEncoder)
    中英文对照 —— 饮食与美食
    matlab 常用机器学习算法的实现
    linux下svn常用指令
    Python创建删除文件
    php使用mysql和mysqli连接查询数据
    vsftpd配置文件详解
  • 原文地址:https://www.cnblogs.com/Keeping-Fit/p/14310959.html
Copyright © 2011-2022 走看看