一、安装
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.youkuaiyun.com/PHPer_dust/article/details/89817094
第二种:predis,git 地址:https://github.com/nrk/predis
引入自动加载文件即可使用: