Redis有五种数据类型:
String(字符串)、List(列表)、Hash(散列)、Set(集合)、sortedSet(有序集合)
先说一下key 这个命令的用法:
keys * | 查看当前库的所有键 |
exists <key> | 判断某个键是否存在 |
type <key> | 查看键的类型 |
del <key> | 删除某个键 |
expire <key><seconds> | 为键值设置过期时间,单位秒 |
ttl <key> | 查看还有多久过期,-1表示永不过期,-2表示已过期 |
dbsize | 查看当前数据库中key的数量 |
flushdb | 清空当前库 |
flushall | 通杀全部库 |
1、 第一个数据类型(String)非常的常见:
字符串类型的value值,可以占用512M的空间,所以可以存储很多的数据。
get <key> | 查询对应键值 |
set <key><value> | 添加键值对 |
append <key><value> | 将给定的<value>追加到原值的末尾 |
strlen <key> | 获取值的长度 |
setnx <key><value> | 只有在key 不存在时设置key的值,SET if Not eXists |
incr <key> | 将key中存储的数字值增1只能对数字值操作,如果为空,新增值为1 |
decr <key> | 将key中存储的数字值减1只能对数字之操作,如果为空,新增值为-1 |
incrby /decrby <key> 步长 | 将key中存储的数字值增减,自定义步长 |
mset <key1><value1><key2><value2> | 同时设置一个或多个key-value对 |
mget <key1><key2><key3> | 同时获取一个或多个value |
msetnx <key1><value1><key2><value2> | 同时设置一个或多个key-value对,当且仅当所有给定的key都不存在 |
getrange <key> <起始位置> <结束位置> | 获得值的范围,类似java中的substring |
setrange <key> <起始位置> <value> | 用<value>覆盖<key>所存储的字符串值,从<起始位置>开始 |
setex <key> <过期时间> <value> | 设置键值的同时,设置过去时间,单位秒 |
getset <key><value> | 以新换旧,设置了新值的同时获取旧值 |
-- 查看当前库的所有键
keys *
-- exists <key> 判断某个键是否存在 1 存在 0 不存在
exists class
-- type <key> 查看键的类型
type class
-- del <key> 删除某个键
del age
-- expire <key><seconds> 为键值设置过期时间,单位秒
set age 18
expire age 100
-- ttl <key> 查看还有多久过期,-1表示永不过期,-2表示已过期
ttl age
-- dbsize 查看当前数据库中key的数量
dbsize
-- flushdb 清空当前库
-- flushall 通杀全部库
-- 添加键值对
set class donghu
-- 查询对应键值
get class
-- 获取值的长度
strlen class
-- 只有在key 不存在时设置key的值,SET if Not exists
setnx object bigdata
incr age
decr age
set age 8
incrby age 10
decrby age 10
mset name lisi age 22
mget name age
2、第二个数据类型:List(非常常见的)
-- 第二个数据类型:List
lpush list01 a b c d e f
lrange list01 0 -1
lpush list02 1 2 3 4 5
lrange list02 0 -1
lpop list01
rpop list01
-- 删除2个5
lrem list02 2 5
lrange list02 0 -1
3、第三种数据类型:Set
Set的特点是无序不重复的
sadd <key><value1><value2> .... | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 |
smembers <key> | 取出该集合的所有值。 |
sismember <key><value> | 判断集合<key>是否为含有该<value>值,有返回1,没有返回0 |
scard <key> | 返回该集合的元素个数。 |
srem <key><value1><value2> .... | 删除集合中的某个元素。 |
spop <key> | 随机从该集合中吐出一个值。 |
srandmember <key><n> | 随机从该集合中取出n个值。不会从集合中删除 |
sinter <key1><key2> | 返回两个集合的交集元素。 |
sunion <key1><key2> | 返回两个集合的并集元素。 |
sdiff <key1><key2> | 返回两个集合的差集元素。 |
-- 第三种数据类型:Set
sadd set01 a b c d e f
smembers set01
sadd set02 1 2 3 4 5
smembers set02
sadd set03 c d f g f
-- 获取set01 和 set03 的差集
sdiff set01 set03
-- 获取set01 和 set03 的交集
sinter set01 set03
-- 获取set01 和 set03 的并集
sunion set01 set03
4、第四种数据类型Hash (类似于之前的map)
Redis hash 是一个键值对集合
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hset <key><field><value> | 给<key>集合中的 <field>键赋值<value> |
hget <key1><field> | 从<key1>集合<field> 取出 value |
hmset <key1><field1><value1><field2><value2>... | 批量设置hash的值 |
hexists key <field> | 查看哈希表 key 中,给定域 field 是否存在。 |
hkeys <key> | 列出该hash集合的所有field |
hvals <key> | 列出该hash集合的所有value |
hincrby <key><field><increment> | 为哈希表 key 中的域 field 的值加上增量 increment |
hsetnx <key><field><value> | 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 |
-- 第四种数据类型Hash (类似于之前的map)
hset donghu name zhangsan01
hget donghu name
hset donghu zhangsan 20
hset donghu lisi 30
keys *
hvals donghu
hgetall donghu
hdel donghu name
hgetall donghu
hkeys donghu
5、第五种数据类型:zset (Sorted Set) 有序的Set集合
zrange <key><start><stop> [WITHSCORES] | 返回有序集 key 中,下标在<start><stop>之间的元素带WITHSCORES,可以让分数一起和值返回到结果集。 |
zrangebyscore key min max withscores | 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 |
zrevrangebyscore key max min withscores | 同上,改为从大到小排列。 |
zincrby <key><increment><value> | 为元素的score加上增量 |
zrem <key><value> | 删除该集合下,指定值的元素 |
zadd <key><score1><value1><score2><value2>... | 将一个或多个 member 元素及其 score 值加入到有序集 key 当中 |
zcount <key><min><max> | 统计该集合,分数区间内的元素个数 |
zrank <key><value> | 返回该值在集合中的排名,从0开始。 |
-- 第五种数据类型:zset (Sorted Set) 有序集合
-- 这不是10个元素,而是5个元素,前面的元素使序号,将来会根据序号进行排序,正序排序
zadd zset01 2 a 3 b 1 c 6 d 4 f
-- 查看元素
zrange zset01 0 -1
-- 倒着输出元素
zrevrange zset01 0 -1
-- 正着输出元素和自己对应的序号
zrange zset01 0 -1 withscores