目录
Redis五大数据类型
Redis键(key)
keys * 查看当前库所有key
exists <key> 判断某个key是否存在
type <key> 查看你的key是什么类型
del <key> 删除指定的key数据
unlink <key> 根据value选择非阻塞删除,即先奏后斩
仅将key从keyspace元数据中删除,真正的删除会在后续异步操作中执行
expire <key> <10> 10秒钟:为指定的key设置过期时间
ttl <key> 查看还有多少秒过期,-1表示永不过期,-2表示已过期
select <index> 命令切换数据库,默认是0号数据库
dbsize 查看当前数据库的大小
flushdb 清空当前数据库
flushall 清空所有数据库
String类型
字符串底层采用列表存储,即ArrayList,长度不够时会进行扩容
set <key> <value> 添加键值对,value可以有双引号也可以没有,如果key已经存在则覆盖value
append <key> <appendValue> 在key对应的值末尾追加appendValue,返回字符串总长度
strlen <key> 获取key对应的字符串长度
setnx <key> <value> 添加键值对,与set的不同在于,只能添加新的,无法覆盖
setxx <key> <value> 覆盖key对应的value,只有key存在时才可行,与上一条指令互斥
incr <key> 将key对应的value加一,当且仅当value为数字
decr <key> 将key对应的value减一,当且仅当value为数字
incrby/decrby <key> <num> 将key对应的value加/减num,当且仅当value为数字
mset <k1> <v1> <k2> <v2> <k3> <v3> 一次设置多个键值对,相当于调用多次set
mget <k1> <k2> <k3> 与mset对应,相当于调用多次get
msetnx 以及msetxx同上,但是这两个指令具有原子性,一个不成功都失败
getrange <key> <起始位置> <结束位置> 获取子串,从起始位置到结束位置,起始位置最小为0,结束位置最大为length-1
setrange <key> <起始位置> <value> 从起始位置开始以value覆盖字符串
getset <key> <value> 用value覆盖key对应的值,返回旧的值
Redis列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或尾部。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
lpush/rpush <key> <value1> <value2> ... 往key对应的值左/右边逐个插入一个或多个值
lpop/rpop <key> 从左/右边弹出一个值,若弹出后列表空了,则删除key
Irange <key> <start> <stop> 按照索引下标获得元素,从start到stop,若stop为-1表示右边第一个
rpoplpush <k1> <k2> 从k1的右边弹出插入到k2的左边
lindex <key> <index> 取key对应的列表的索引为index的元素
llen <key> 获取列表的长度
linsert <key> <before/after> <value> <newValue> 在value的前面/后面插入一个newValue
lrem <key> <num> <value> 从左边删除num个value
lset <key> <index> <value> 替换第index个元素为value
Redis集合(Set)
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口。
Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是O(1)。
sadd <key> <value1> <value2>... 添加一个或多个元素到key集合中,其中重复的会被忽略
smember <key> 取出该集合的所有值
sismember <key> <value> 判断集合key是否含有value
scard <key> 返回该集合的元素个数
srem <key> <value1> <value2>... 删除集合中的某个元素
spop <key> 随机从该集合中弹出一个值,值取完了key也就不存在了
srandmember <key> <n> 随机从该集合中取出n个值,不会从集合中删除
smove <key1> <key2> <value> 把集合key1中的value移动到集合key2
sinter <key1> <key2> 返回两个集合的交集元素
sunion <key1> <key2> 返回两个集合的并集元素
sdiff <key1> <key2> 返回两个集合的差集元素(在key1中,不在key2中)
Redis哈希(Hash)
Redis hash是一个键值对集合,String类型的field和value的映射表,可以用于存储对象
hest <key> <field> <value> 给key集合中的field键赋值为value
hget <key> <field> 取出key集合中的field键对应的值
hmset <key> <field> <value>... 批量添加
hexists <key> <field> 查看该hash集合中是否存在field域
hkeys 列出该hash集合的所有field
hvals 列出该hash集合的所有value
hincrby <key> <field> <increment> 为哈希表key中的域field的值加上增量
hsetnx <key> <field> <value> 添加值,当且仅当field不存在
Redis有序集合(Zset)
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
不同之处是有序集合的每个成员都关联了一个评分(score),这个评分被用来从低到高排序。集合的成员是唯一的,但评分是可以重复的。
由于元素是有序的,因此可以快速根据评分或者索引获取一个范围的元素
zadd <key> <score1> <value1> <score2> <value2>... 往集合中添加一个或多个值
zrange <key> <start> <stop> [withscore] 输出下标在start和stop之间的索引, 可以选择是否输出score
zrangebyscore <key> <min> <max> [withscore] 输出score在min和max之间的元素
zrevrangebyscore <key> <min> <max> [withscore] 同上,但改为由大到小输出
zincrby <key> <increment> <value> 为元素的score加上增量
zrem <key> <value> 移除元素
zcount <key> <min> <max> 统计该集合,分数区间内的元素个数
zrank <key> <value> 返回该值在集合中的排名,从0开始