2019-05-24笔记:redis的安装及使用

    xiaoxiao2022-07-07  244

    一、安装

    redis官网:https://redis.io/

    redis中文网:http://www.redis.cn/

    redis GigHub地址:https://github.com/antirez/redis

    下载软件包并解压

    wget http://download.redis.io/releases/redis-5.0.4.tar.gz tar -xzvf redis-5.0.4.tar.gz

      

    安装

    # PREFIX 指定安装目录 make PREFIX=/lamp/redis/ install

      

    复制 redis.conf 到安装目录下

    cp redis.conf /lamp/redis/

    修改 redis.conf 配置文件

    daemonize 的值改为 yes,表示以守护进程的方式启动

    二、常用配置

    port             6379                           默认端口

    bind            127.0.0.1                    默认绑定的主机地址

    timeout       0                                 当客户端闲置多久后关闭链接,0代表未启动

    loglevel        notice                         日志的记录级别

                        debug                         很详细的信息,适合开发和测试

                        verbose                      包含很多不太有用的信息

                        notice                          比较适合生产环境

                        warning                       警告信息

    logfile          stdout                          日志的记录方式,默认为标准输出

    database     16                                默认数据库的数量为16个

    save      <seconds> <changes>      多少秒内有多少次改变将其同步到磁盘的数据文件

    save      900              1                     900秒内1次改变

    save      300              10

    save      60                 100

    rdbcompression   yes                         存储本地数据库时是否启用压缩,默认为 yes

    dbfilename           dump.rdb                指定数据库文件名,默认为 dump.rdb

    dir                         ./                             指定本地数据库的存放目录,默认是当前目录

    三、数据类型

    String:字符串

    string 是 redis 最基本的类型,一个 key 对应一个 value。

    string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

    string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

    Hash:哈希

    Redis hash 是一个键值(key=>value)对集合。

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

    List:列表

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

    Set:集合

    Redis的Set是string类型的无序集合。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

    zset:有序集合

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

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

    四、状态返回值

    状态回复

      

      

    错误回复:错误回复以 error 开头

      

    整数回复

      

    字符串回复

      

    空的回复

      

    多行字符串回复

      

    五、redis 操作

    1.key 操作

    KEYS:查找所有符合给定模式 pattern 的 key

      ​​​​​

    EXISTS:检查给定 key 是否存在

      

    TYPE:返回 key 所储存的值的类型

      

    EXPIRE:以秒设置 key 的过期时间 & TTL:以秒为单位返回 key 的剩余过期时间

      

    TTL补充:当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。

    PEXPIRE:以毫秒为单位设置 key 的生存时间 & PTTL:以毫秒为单位返回 key 的剩余过期时间

      

    PTTL补充:当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。

    EXPIREAT:以 UNIX 时间戳格式设置 key 的过期时间

      

    PEXPIREAT:以 UNIX 时间戳格式设置 key 的过期时间,以毫秒计

      

    PERSIST:移除给定 key 的过期时间,使得 key 永不过期

      

    DEL:删除已存在的键。不存在的 key 会被忽略。

      

    RANDOMKEY:从当前数据库中随机返回一个 key

      

    RENAME:修改 key 的名称

      

      

    RENAMENX:在新的 key 不存在时修改 key 的名称

      

    DUMP:序列化给定 key ,并返回被序列化的值

      

    MOVE:将当前数据库的 key 移动到给定的数据库 db 当中

      

    2.string 操作

    SET:设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

      

      

    EX seconds:设置 key 的过期时间 & PX milliseconds:以毫秒形式设置过期时间

      

    NX:只有 key 不存在时才可以设置 & XX:只有 key 存在时才可以设置

      

    GET:获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

      

    GETRANGE:获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。

      

    GETSET:设置指定 key 的值,并返回 key 的旧值。

      

    当 key 没有旧值时,即 key 不存在时,返回 nil 

      

    MGET:回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 

      

    SETEX:为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。

      

    SETNX:在指定的 key 不存在时,为 key 设置指定的值

      

    SETRANGE:指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。

      

    STRLEN:获取指定 key 所储存的字符串值的长度

      

    MSET:同时设置一个或多个 key-value 对

      

    MSETNX:用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对

      

    PSETEX:以毫秒为单位设置 key 的生存时间

      

    INCR:命令将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

      

    如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误

      

    INCRBY:将 key 中储存的数字加上指定的增量值,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

     

    INCRBYFLOAT:为 key 中所储存的值加上指定的浮点数增量值,如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

      

    DECR:将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

      

    DECRBY:将 key 所储存的值减去指定的减量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

      

    APPEND:为指定的 key 追加值。如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

      

    3.hash类型

    HSET:为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。

      

    HSETNX:用于为哈希表中不存在的的字段赋值 。如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

      

    HMSET:同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

      

    HGET:返回哈希表中指定字段的值。

      

    HMGET:返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。

      

    HGETALL:返回哈希表中,所有的字段和值。在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。

      

    HKEYS:获取哈希表中的所有域(field)。

      

    HVALS:返回哈希表所有域(field)的值。

      

    HEXISTS:查看哈希表的指定字段是否存在。

      

    HLEN:获取哈希表中字段的数量。

      

    HINCRBY:为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

      

    HINCRBYFLOAT:为哈希表中的字段值加上指定浮点数增量值。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

      

    HDEL:删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

      

    4.list 类型

    LPUSH:将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。

      

    RPUSH:将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。

      

    LPUSHX:将一个值插入到已存在的列表头部,列表不存在时操作无效。

      

    RPUSHX:将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。

      

    LPOP:移除并返回列表的第一个元素。

      

    RPOP:移除列表的最后一个元素,返回值为移除的元素。

      

    LLEN:返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

      

    LRANGE:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

      

    LREM:根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

    count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。

      

    count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。

      

    count = 0 : 移除表中所有与 VALUE 相等的值。

      

    LINDEX:通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

      

    LSET:通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。

      

    LTRIM:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

      

    LINSERT:用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果 key 不是列表类型,返回一个错误。

      

      

    RPOPLPUSH:用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

      

    5.set 操作

    SADD:将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误。

      

    SMEMBERS:返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

      

    SISMEMBER:判断成员元素是否是集合的成员

      

    SREM:移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。当 key 不是集合类型,返回一个错误。

      

    SPOP:移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素

      

    SRANDMEMBER:用于返回集合中的一个随机元素

    如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

      

    如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

      

    SDIFF:返回给定集合之间的差集。不存在的集合 key 将视为空集。差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。

      

    SINTER:返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。

      

    SUNION:返回给定集合的并集。不存在的集合 key 被视为空集。

      

    SCARD:返回集合中元素的数量

      

    SDIFFSTORE:将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。

      

    SINTERSTORE:将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。

      

    SUNIONSTORE:将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖。

      

    SMOVE:将指定成员 member 元素从 source 集合移动到 destination 集合。

      

    如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。

      

    当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

      

    6.zset 操作

    ZADD:将一个或多个成员元素及其分数值加入到有序集当中。如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。

      

    如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

      

    分数值可以是整数值或双精度浮点数。正无穷大以及负无穷大。

      

    ZSCORE:返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

      

    ZRANGE:返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列。下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

      

    ZREVRANGE:返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

      

    ZRANGEBYSCORE:返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

      

    限制元素个数

      

    ZREVRANGEBYSCORE:返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。

      

    ZINCRBY:对有序集合中指定成员的分数加上增量 increment。可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。分数值可以是整数值或双精度浮点数。

      

    ZCARD:用于计算集合中元素的数量。

      

    ZCOUNT:用于计算有序集合中指定分数区间的成员数量。

      

    ZREM:用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。

      

    ZREMRANGEBYRANK:用于移除有序集中,指定排名(rank)区间内的所有成员。

      

    ZREMRANGEBYSCORE:用于移除有序集中,指定分数(score)区间内的所有成员。

      

    ZRANK:返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

      

    ZREVRANK:返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。

      

    ZINTERSTORE:计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

      

    AGGREGATE 参数:默认为 SUM,即上图。MAX 和 MIN 效果一样。

      

    WEIGHTS参数:集合分数 X weights 然后分数相加或取最大最小值。

      

      

    ZUNIONSTORE:计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。

      

      

    六、redis 事务

    MULTI:用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

      

    EXEC:用于执行所有事务块内的命令。

      

    WATCH:用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

      

      

    UNWATCH:取消 WATCH 命令对所有 key 的监视。

      

    DISCARD:取消事务,放弃执行事务块内的所有命令。

      

    七、redis 连接

    PING:向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。

      

    ECHO:打印给定的字符串。

      

    QUIT:用于关闭与当前客户端与redis服务的连接。一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。

      

    SELECT:切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

      

    AUTH:检测给定的密码和配置文件中的密码是否相符。

    配置密码:

      

    重启服务器后测试:

      

    八、排序相关

    SORT:redis支持对list,set,sorted set元素的排序

    格式:sort key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey] 

      

      

    字符串排序,不使用参数会报错

      

    使用 LIMIT 限制数量

      

    根据外部 key 的权重进行排序

      

      

      

    根据排序结果取出相应键值

      

      

    保存排序结果

      

    九、PHP 操作 redis

    第一种:redis 扩展

    在 PECL 下载 redis 扩展,安装方法参考:https://blog.csdn.net/PHPer_dust/article/details/89817094

    第二种:predis,git 地址:https://github.com/nrk/predis

    引入自动加载文件即可使用:

      

     

    最新回复(0)