Redis的数据类型
redis一共有五大数据类型,分别是:String、Hash、List、set、zset。下面分别介绍下每个数据类型的基本使用方法。 redis-doc
String数据类型
keys * 查看有多少个key,使用keys命令需要慎重,他是阻塞的,因此不要在正式环境使用。
# 查看所有的key
keys *
# 查看所有 a 开头的key
keys a*
# 查看所有以e结尾的key
keys *e
# 查询key的类型,keyname是某个key的名字
type keyname
set: 设置一个变量,变量存在更新
例子:set key value
setnx: 设置一个变量,变量存在,不更新,不存在则添加
例子:setnx key value
ttl: (time to leave)查看key剩下的时间,返回 -1,表示永久保存
例子:ttl key
expire: 为某个key设置过期时间
例子:expire key second
set ex: 设置带有过期时间的key
例子:set key value ex second
append: 字符串的拼接,在现有的key字符串后拼接一个:123
例子:append key 123
strlen: 查看字符串的长度,查看key这个字付串的长度
例子:strlen key
incr: 累加,在当前的key对应的value数值上 +1
例子:incr key
decr: 累减,在当前的key对应的value数值上 -1
例子:decr key
incrby: 带有步长的累加
例子:incrby key 步长数值,【incrby key 10】
decrby: 带有步长的累减
例子:decrby key 步长数值,【decrby key 10】
getrange: 截取字符串的一段返回
例子:getrange key 1 2,获取key这个字符串的第1个字符到第2个字符,从0开始算
setrange: 替换字符串的某一段
例子:setrange key 2 aa,从第2个字符开始,替换两个字符为aa,abcde -> abaae
mset: 批量设置key
mset key value [key value ...],mset key1 value1 key2 value2
mget: 批量获取key
mget key [key ...],mget key1 key2
msetnx: 设置多个key,不能设置重复的key
msetnx key1 value1 key2 value2 , 如果当前有key1,则本命令会执行失败,key2也不会保存
默认情况下,redis是有16个库,默认使用的是0,可以在配置文件内修改:databases参数来设置有多少个库。使用:select num(num表示库的下标),切换不同的库。
flushdb: 清除当前库里所有的数据 flushdball: 清除所有库里的数据
flushdb和flushdball谨慎使用
Hash数据类型
hash数据类型,可以将结构化的数据存放到内存里面去。
记忆:hash操作的命令都是以 h 开头,后面的基本和string命令相同。
使用方法
hset key field value: 添加hash类型的数据
- hset 表示添加一个hash数据类型的数据
- key 数据的key
- field 数据的字段
- value 字段对应的值
例子:想要存放一个 user:{"name":"xiaoming", "age":18, "sex":"man"} hset user name xiaoming hset user age 18 hset user sex man
hget key field:获取hash类型的数据
- hset 表示添加一个hash数据类型的数据
- key 数据的key
- field 数据的字段
例子:获取 user:{"name":"xiaoming", "age":18, "sex":"man"}数据的名字 hget user name
hmset key field value [field value ...]: 为某个key批量设置字段和值
hmget key field [field ...]: 同时获取某个key下多个字段的值
hgetall key:获取某个key下所有的字段和值
hgetall 的返回值是field value field value 的形式。
hlen key:返回这个key下属性的数量 hkeys key:返回key下所有的属性(field) hvals key:返回key下所有的值(value) hincrby key field number:key下field字段的值累加number hincrbyfloat key field number:key下field字段的值累加number,number可以是小数 hexists key field:判断key下是否存在field属性,存在返回1 hdel key field [field ...]: 删除key的field属性,支持同时删除多个属性
List数据类型
List 是一个列表,可以理解为数组。 List操作的命令都以 l 开头。
使用方法
lpush key value [value ...]: 从左边添加一个list数据类型的数据 lrange key start end:获取key 的数据
例子:lrange key 0 -1 获取列表key下的所有数据
rpush key value [value ...]: 从右边添加一个list数据类型的数据 lpop key:从左边取出一个值 rpop key:从右边取出一个值 llen key:获取key的长度 lindex key num:获取key列表的下标为num的value,该方法不会删除列表的数据 lset key num value:将key列表下标为num的值修改为value linsert key before|after pivot value:将value插入到key列表pivot数值的前面(before)或后面(after) lrem key count value:删除key列表内count个value ltrim key start stop:截取key列表从start开始到stop,包含start和stop
del key 可以删除任何数据类型的key
Set 数据类型(集合)
set数据类型,会自动删除掉重复的数据。 set数据类型的操作命令都是以 s 开头。
使用方法
sadd key member [member ...]: 添加数据 smembers key:查看key集合下所有数据 scard key:查看key集合下数据的数量 sismember key member:查看member是否在key集合下 srem key member [member ...]: 删除key集合下member,支持同时删除多个 spop key [num]: 随机获取并删除key集合下一个或多个member,num表示删除个数 srandmembe key [num]:在key集合下随机抽取一个或多个数,num表示随机抽取个数 smove source destination member:从source集合移除member并添加到destinaction集合 sdiff key [key ...]: 获取key1集合内有的,在key2内没有的数据,key1相对于key2的差集 sinter key [key ...]: 获取key1和key2集合的交集 sunion key [key ...]: 获取key1和key2集合的并集
Zset 数据类型(有序集合)
zset和set的区别是zset每一个member都有一个分数,这个分数是有序排列的。 zset的操作命令都是以 z 开头。
使用方法
zadd key score member [score member]:有序集合添加一个key 分数为score,值为member的数据,可以添加多个。 zrange key start stop [withscores]:查询key下的数据
例1:zrange key 0 -1 # 查看所有 例2:zrange key 0 1 # 查看下标0到1的数据 例3:zrange key 0 -1 withscores # 查看数据和分数
zrank key member:查询key下的值为member的下标
zrank key abc 查询key下值为abc的数据在key集合的位置,这里的位置不是分数。
zscore key member:查询key集合下值为member的分数
zcard key:查询key集合下有多少个值
zcount key min max:查询key集合下,分数大于等于min小于等于max的值有多少个
zrangebyscore key min max [withscores] [limit offset count]:查看分数大于等于min小于等于max的值, 加上withscores,可以展示分数
如果查询时不想要等于边界的数据,可以使用如下方式获取: zrangebyscore key (min (max 这样就不会包含边界值了,上面的命令也可以使用。 limit 相当于mysql的分页,limit 1 2,在结果集从第一个开始获取2个返回。
zrem key member [member]:删除key集合下值为member的数据,可删除多个