Redis键
- 查看key:
- 判断键是否存在:
- 判断键的类型:
- 删除键:
del key
ulink key
unlink
仅将keys从keysspace元数据中删除,真正的删除会在后续的异步操作
- 设置键的过期时间:
expire K1 10
表示K1 10S后过期- 查看过期时间,
-1
表示永不过期,-2
表示已经过期,整数表示还有多少秒过期
数据库操作
- 切换数据库:
select 1
默认使用0号数据库,数据库编号0~15- 查看当前数据库的
key
的数量:dbsize
- 清空当前库的内容:
flushdb
- 清空所有库中的内容:
fluashall
字符串
- String是Redis最基本的数据类型,同时是二进制安全的,即Redis的String可以包含任何数据
- 一个字符串的value最多可以是512M
String
的底层数据结构是简单动态字符串
,类似与C++中的String类型
- 基本命令:
- 设置值:
set
,没有key将会创建,否则会修改value值- 获取值:
get key
- 将给定的
value
追加到原值的末尾:append key value
- 获取值的长度:
strlen key
- 只有在
key
不存在时,设置key的值:setnx key value
incr key
将key中存储的数字值+1,incrby key 步长
将key中存储的值增加步长decr key
将key中存储的数字值-1,decrby key 步长
将key中存储的值减少步长- 只能对数字值进行操作,这类操作具有原子性,即不会被线程调度打断
mset:
同时设置多个key-value
mget:
同时获取多个value
msetnx:
同时设置多个key-value
,当且仅当所有给定的key
都不存在时,才成功
getrange
获取一定范围的值类似与substr
setrange
设置一定范围的值
setex
设置key-value
同时设置过期时间getset
以新换旧,设置了新值同时获得旧值
列表
- Redis列表是简单的
字符串列表
,按照插入顺序
排序,可以在列表头部
或尾部
插入元素,底层是一个双向链表
- 列表元素较少的情况下,会使用连续的内存存储,结构成为
ziplist
压缩列表,当数据量比较多的时候才会改成quicklist
,即将ziplist
与链表组合成quicklist
,可以满足快速插入删除性能,又不会出现太大的空间冗余
- 常用的命令:
lpush/rpush
从左边/右边插入一个或多个值(头插法/尾插法
)lpop/rpop
从左边或右边吐出一个值,值在键在,值光键亡lrange
取出指定范围的值,0表示最左边,-1表示最右边
rpoplpush:
从key1
列表的右边吐出1个值,插入到key2
列表的右边lindex
按照索引下标获取元素llen
获取列表的长度
insert key before/after value newvalue
在value
后面插入newvalue
的值lrem Key n value
从左到右删除n
个value
值lset Key index value
将下标为index
的值替换为value
集合
- Redis Set对外提供的功能与list类似是一个列表的功能,但set可以
自动排除重复
- Redis Set是string类型的
无序集合
,底层是一个hash表
- 基本命令:
sadd:
将一个或多个元素加入集合中smembers:
取出该集合的所有值sismember <key> <vlalue>
判断集合<key>
是否包含该<value>
值scard:
返回集合中的元素个数
srem
删除集合中的某些元素spop <key> <n>
随机吐出集合中的一/多个值(n可加可不加)srandmember <key> <n>
随机从集合中取出n个值,但不会从集合中删除
smove <source> <distination> value
把集合中的一个值移动到另一个集合中sinter <key1> <key2>
返回两个集合的交集元素sunion <key1> <key2>
返回两个集合的并集元素sdiff <key1> <key2>
返回两个集合的差集元素
哈希
- Redis中的哈希是一个
键值对
的集合,是一个string
类型的field
和value
的映射表,特别适合存储对象
2. Hash对应的数据结构有两种,
ziplist
压缩列表和hashtable
哈希表,当field-value
长度较短且个数较少时,使用压缩列表,否则使用hash表
- 常用命令:
hset<key> <field> <value>
给<key>
集合的<field>
键赋值<value>
,hmset
与hset
功能和用法相同hget <key> <field>
从<key>
集合<field>
中取出value
hexists <key> <field>
查看哈希表中给定域是否存在
hkeys <key>
列出hash集合中所有field
hvals <key>
列出hash集合中的所有value
hincrby <key> <field> <increment>
为hash表key
中的field
域加上增量(前提必须是整数)hsetnx <key> <field> <value>
将hash表key
中的field
域设置为value
,当且仅当域field
不存在,才能成功
有序集合
- Redis有序集合Zset和普通集合非常相似,是一个
没有重复元素
的字符串集合,不同之处是有序集合的每个成员都关联了一个评分
,这个评分被用来按照从最低分到最高分的方式排序集合的成员,集合的成员是唯一的,但是评分可以重复的
zset
中使用了两种数据结构
(1)hash
,hash的作用就是关联元素value
和权重score
,保障元素value
的唯一性,可以通过元素value
找到相应的score
值
(2)跳跃表
跳跃表的目的是给元素value
排序,根据scrore
的范围获取元素列表
- 基本命令:
zset <key> <score1> <value1> <score2> <value2>
将一个或多个元素及其评分加入有序集合<key>
中zrange key start stop [withscores]
返回有序集合key
中,下标<start>
<stop>
之间的元素,带withscores
可以让分数和值一起返回到结果集zrangebyscore <key> min max [withscores]
返回有序集合<key>
中,所有scores
值介于min
和max
之间的成员,有序集成员按score
值递增的次序排列zrevrangebyscore <key> max min [withscores]
返回有序集合<key>
中,所有scores
值介于min
和max
之间的成员,有序集成员按score
值递递减的次序排列
zcrby <key> <increment> <value>
为元素的score
加上增量zrem <key> <value>
删除该集合下,指定值的元素
zcount <key> <min> <max>
统计该集合,分数区间内的元素个数zrank <key> <value>
返回该值在集合中的排名,从0开始