文章目录
一、数据结构
Redis 是一种面向“键/值”对类型数据的分布式 NoSQL 数据库系统,特点是
高性能,持久存储,适应高并发的应用场景。
二、键 key
1、关于 key 的几条规则:
* 不易太长的键值,容易消耗内存,而且在数据中查找这类键值的计算成本很高。
* 太短的键值也不是很好,不容易知道键名的含义,过于简单。
* 最好坚持一种模式。例如:”object-type:id:field”就是个不错的注意,像这样”user:1000:password”。我喜欢对多单词的字段名中加上一个点,就像这样:”comment:1234:reply.to”。
2、Redis设置Key的过期时间 – EXPIRE命令
* RENAME :重新生成一个带生存时间的key,与原来的key的生存时间一致,名字不同。
* PERSIST :移除key的生存时间,让 key 重新成为一个『持久的』(persistent) key 。
* EXPIRE:改变原来key的生存时间。(没有的新增生存时间)
二、redis命令
哈希(Hash)
数据结构模版:
基本命令:
-
hset 单条数据,field有更新,没有新增
hset key_name field value
-
hsetnx 单条数据,field不存在,才添加成功
hsetnx key_name field value
-
hmset 多条数据新增
hmset key_name field value [field value ...]
-
hget 取单条value
hget key_name field
-
hmget 取多条value
hmget key_name field [field ...]
-
hgetall 取全部数据
hgetall key_name
-
hdel 删除指定元素(一个或多个)
hdel key_name field [field ...]
-
hlen 获取hash表的长度
hlen key_name
-
hexists 验证HASH表中是否存在指定的KEY-VALUE
hexists key_name field
-
hincrby 根据HASH表的KEY,为KEY对应的VALUE自增参数VALUE。
hincrby key_name field int(数量)
-
hincrbyfloat 根据HASH表的KEY,为KEY对应的VALUE自增参数VALUE。浮点型
hincrbyfloat key_name field float(浮点型 )
-
hkeys 取得HASH表中的KEYS,以数组形式返回。
hkeys key_name
-
hvals 取得HASH表中所有的VALUE,以数组形式返回。
hvals key_name
有序集合(Zset)
数据结构模版:
- zadd 将元素及其分数添加到集合中,存在时,更新;不存在,添加
语法:zadd key score value
- zscore 获得指定成员的分数
语法:zscore key value
- zrange
作用:取得特定范围内的排序元素,0代表第一个元素,1代表第二个以此类推。-1代表最后一个,-2代表倒数第二个...,参数WITHSCORES指定显示分数
语法:zscore key start stop [withscores]
包含stop
若stop索引超过集合长度,则返回全部存在的元素
若start超过了集合的长度,则为空
分数相同时,按照字典的顺序排序
注:==类似mysql的between...and..==
- zrevrange
作用:与 * zrange * 相反
* zrange *->正序
* zrevrange *->倒序
- zRangeByScore 从小到大排序查询
语法:zrangebyscore key min max [withscores] [limit offset count]
LIMIT 必须指定偏移量, 在指定数量
- zRevRangeByScore 从大到小排序查询,与zrangebyscore相反
语法:zrangebyscore key max min [withscores] [limit offset count]
- zincrby
作用: 操作某个元素的分数,返回操作之后的分数
语法: ZINCRBY (key increment value)
value存在,在原基础上增加(increment)的值,value不存在,直接添加
- zcard/zsize
作用: 获得集合中元素的数量
语法: ZCARD (key)
- zcount
作用: 指定分数范围内的元素个数
语法: ZCOUNT (key min max)
- zrem/zdelete
作用: 删除一个或者多个元素,返回删除元素的个数
语法: ZREM (key member,member ...)
- zRemRangeByScore
作用: 按照分数范围删除元素(score的值)
语法: ZREMRANGEBYSCORE (key min max)
- zRemRangeByRank
作用: 按照分数从小到大的顺序, 删除指定索引范围内的所有的元素
语法: ZREMRANGEBYRANK (key start stop)
- zrank
作用: 按照分数从小到大的顺序, 获得指定元素的排名(索引第几个,0开始)
语法: ZRANK (key value)
- zrevrank
作用:与zrank相反
- ZINTERSTORE
作用: 计算有序集合的交集,并将结果保存起来
语法: ZINTERSTORE destination numkeys key key...
[WEIGHTS weight weight...] [AGGREGATE SUM|MIN|MAX]
默认是分数求和
destination 指定目标集合
numkeys 指定集合的个数
key 指定集合名称
WEITHGS 指定权重
AGGEGATE 分数的计算方式
==例如:==
<?php
# 有序集 mid_test
redis 127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1
# 另一个有序集 fin_test
redis 127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1
# 交集
redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3
# 显示有序集内所有成员及其分数值
redis 127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"
?>
- ZUNIONSTORE
作用: 计算有序集合的并集,并将结果保存起来
语法: ZINTERSTORE destination numkeys key key...
[WEIGHTS weight weight...] [AGGREGATE SUM|MIN|MAX]
默认是分数求和
destination 指定目标集合
numkeys 指定集合的个数
key 指定集合名称
WEITHGS 指定权重
AGGEGATE 分数的计算方式
==例如:==
<?php
redis 127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
redis 127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
redis 127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3 # 公司决定加薪。。。除了程序员。。。
(integer) 6
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"
?>
集合(Set)
数据结构模版:
- sadd
作用:添加一个或多个元素
语法:sadd(key,values)
- scard
作用:获取key(name)所对应的个数;如,mysql中的count
语法:scard(key)
- sdiff
作用:在第一个name(key)对应的集合中且不在其他name(key)对应的集合的元素集合,多个key里内容的差集。(第一个有,其他都没有)
语法:sdiff(key1,key2,key3...)
- sdiffstore
作用:获取第一个name(key)对应的集合中且不在其他name(key)对应的集合,再将其新加入到dest对应的集合中;几个key的差集,存入另一个新的key中。
语法:sdiffstore(dest,key1,key2,key3...)
- sinter
作用:获取多一个name(key)对应集合的并集,(取集合里都有的值)
语法:sinter(key1,key2,key3....)
- sinterstore
作用:获取多一个name(key)对应集合的并集,再讲其加入到dest对应的集合中。
语法:sinterstore(dest,key1,key2,key3....)
- sismember
作用:检查value是否是name(key)对应的集合的成员
语法:sismember(key,value)
- smembers
作用:获取name(key)对应的集合的所有成员(取所有值)
语法:smembers(key)
- smove
作用:将某个成员从一个集合中移动到另外一个集合,
语法:smove(src,dst,value)
注:src移出,dst移入
- spop
作用:从集合的右侧(尾部)移除一个成员,并将其返回;类似数组中的array_pop
语法:spop(key)
- srandmember
作用:从name(key)对应的集合中随机获取 numbers 个元素
语法:srandmember(key,numbers)
注:numbers(数量)
- srem
作用:在name(key)对应的集合中删除某些值
语法:srem(key,values)
- sunion
作用:获取多一个name(key)对应的集合的并集
语法:sunion(key1,key2,key3...)
- sunionstore
作用:获取多一个name(key)对应的集合的并集,并将结果保存到dest对应的集合中
语法:sunionstore(dest,key1,key2,key3....)
列表(List)
数据结构模版:
- lpush
作用:在name对应的list中添加元素,(多个)每个新的元素都添加到列表的最左边(头部)
语法:lpush(key,values)
扩展:rpush(key,values):最右边(底部)添加
- lpushx(有key添加)
作用:在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
语法:lpushx(key,values)
扩展:rpushx(key,values);最右边(底部)添加
- llen
作用:获取列表长度
语法:llen(key)
- blpop
作用:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
语法:blpop(key[key1,key2],timeout)
注:有值弹出,没值timeout(时间值,秒)后弹出nil。
- brpop
作用:与blpop相反,弹最后一个出去
- brpoplpush
作用:从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
语法:brpoplpush(key1,key2,time)
注:弹出key1的最后一个,到key2的第一个
- lindex
作用:通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
语法:lindex(索引:0,-1)等
- linsert
作用:在列表的元素前或者后插入元素。
当指定元素不存在于列表中时,不执行任何操作。
当列表不存在时,被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。
语法:linsert(key before value , new_value)
- lpop
作用:移除并返回列表的第一个元素
语法:lpop(key)
- rpop
作用:移除并返回列表的最后一个元素
语法:rpop(key)
- lrange
作用:获取列表指定范围内的元素
语法:lrange(key start end)
注:0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
- lrem
作用:移除列表元素
语法:lrem(key count value)
注:COUNT 的值可以是以下几种:
`count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。`
- lset
作用:通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。
语法:lset(key 索引 value)
- ltrim
作用:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
语法:ltrim (key start stop)
- rpoplpush
作用:移除列表的最后一个元素,并将该元素添加到另一个列表并返回
语法:rpoplpush(key new_key)
字符串(string)
数据结构模版:
- set
作用:设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
语法:set(key,value)
- get
作用:获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。
语法:get(key)
- getrange
作用:获取存储在指定 key 中字符串的子字符串。
字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
语法:getrange(key,start,end)
- getset
作用:设置指定 key 的值,并返回 key 旧的值。
语法:getset(key,value)
返回值:返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。
当 key 存在但不是字符串类型时,返回一个错误。
- getbit
作用:对 key 所储存的字符串值,获取指定偏移量(offset)上的位(bit)。
语法:getbit(key,offset)
- mget
作用:获取所有(一个或多个)给定 key 的值。
语法:mget(key1,key2......)
- setbit
作用:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
语法:setbit(key ,offset)
- setex
作用:将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
语法:setex(key,timeout,value)
注:ttl :获取过期时间(秒)
- setnx
作用:只有在 key 不存在时,设置 key 的值。
语法:setnx(key ,value)
- setrange
作用:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
语法:setrange(key,offset,value)
- strlen
作用:返回 key 所储存的字符串值的长度。
语法:strlen(key)
- mset
作用:同时设置一个或多个 key-value 对。
语法:mset(key1 value1,key2 value2........)
- msetnx
作用:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
语法:msetnx(key1,value1,key2, value2.........)
- psetex
作用:以毫秒为单位设置 key 的生存时间。类似(setex)
语法:psetex(key,timeout,value)
注:pttl :获取过期时间(毫秒)
- incr
作用:将 key 中储存的数字值增一。
语法:incr(key)
注:值不为数字,则返回一个错误
- incrby
作用:将 key 所储存的值加上给定的增量值(increment) 。
语法:incrby(key,incr)
- incrbyfloat
作用:将 key 所储存的值加上给定的浮点增量值(increment) 。
语法:incrbyfloat(key ,float)
- decr
作用:将 key 中储存的数字值减一。
语法:decr(key)
- decrby
作用:key 所储存的值减去给定的减量值(decrement) 。
语法:decrby(key , decr)
- append
作用:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
语法:append(key,new_value)