select
命令切换数据库
dbsize
查看当前数据库的key的数量
flushdb
清空当前库
flushall
通杀全部库
- key键操作
keys *
:查看当前库所有key(匹配:keys *1)exists key
:判断某个key是否存在type key
:查看你的key是什么类型del key
:删除指定的key数据unlink key
:根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。expire key [number]
:为key设置过期时间,时间以秒为单位,比如expire key 10表示十秒后过期。ttl key
:查看还有多少秒过期,-1表示永不过期,-2表示已过期
- 字符串(String)
String的数据结构为动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。⚠️字符串最大长度为512M。
常用命令
set <key> <value>
:添加键值对get <key>
:查询对应键值append <key> <value>
:将给定的追加到原值的末尾strlen <key>
:获得值的长度setnx <key> <value>
:只有在key不存在时,设置key的值incr <key>
:将key中存储的数字值增1,只能对数字值操作,如果为空,新增值为1decr <key>
:将key中存储的数字值减1,只能对数字值操作,如果为空,新增值为-1incrby/decrby <key> <步长>
:将key中存储的数字值增减,自定义步长mset <key1> <value1> <key2> <value2>…
:同时设置一个或多个key-value对mget <key1> <key2> <key3>…
:同时获取一个或多个valuemsetnx <key1> <value1> <key2> <value2>…
:同时设置一个或多个key-value对,当且仅当所有给定key都不存在getrange <key> <起始位置> <结束位置>
:获得值的位置,类似Java中的substring,前包,后包setrange <key> <起始位置> <value>
:用覆写 所存储的字符串值,从<起始位置>开始(索引从0开始)setex <key> <过期时间> <value>
:设置键值的同时,设置过期时间,单位秒getset <key> <value>
:以新换旧,设置了新值同时获得旧值
- 列表(List)
单键多值,Redis列表是简单的字符串列表,按照插入顺序排序,底层实际是个双向链表。
常用命令
lpush/rpush <key> <value1> <value2> <value3>…
:从左边/右边插入一个或多个值。lpop/rpop <key>
:从左边/右边吐出一个值。值在键在,值光键亡。rpoplpush <key1> <key2>
:从列表右边吐出一个值,插到列表左边。lrange <key> <start> <stop>
:按照索引下标获得元素(从左到右),lrange key 0 -1表示取所有。lindex <key> <index>
:按照索引下标获得元素(从左往右)。llen <key>
:获得列表长度。linsert <key> before/after <value> <newvalue>
:在的前面/后面插入插入值。lrem <key> <n> <value>
:从左边删除n个value(从左到右)。lset <key> <index> <value>
:将列表key下标为index的值替换成value。
- 集合(Set)
set与list类似,也是一个列表的功能,特殊之处在于set是可以自动排重的。set是String类型的无序集合,它的底层其实是一个value为null的hash表,所以添加、删除和查找的复杂度都是O(1)。
set数据结构是dict字典,字典是用哈希表实现的。
常用命令
sadd <key> <value1> <value2>…
:将一个或多个member元素添加到集合key中,已经存在的member元素将被忽略。smembers <key>
:取出该集合的所有值。sismember <key> <value>
:判断集合是否含有该值,有1,没有0。scard <key>
:返回该集合的元素个数。srem <key> <value1> <value2>…
:删除集合中的某个元素。spop <key>
:随机从集合中吐出一个值。srandmember <key> <n>
:随机从该集合中取出n个值。不会从集合中删除。smove <source> <destination> value
:把集合中一个值从一个集合移动到另一个集合。sinter <key1> <key2>
:返回两个集合的交集元素。sunion <key1> <key2>
:返回两个集合的并集元素。sdiff <key1> <key2>
:返回两个集合的差集元素(key1中的,不包含key2中的)。
- 哈希(Hash)
hash是一个键值对集合,是一个string类型的field和value的映射表,hash表特别适合用于存储对象。类似于Java里面的Map<String,Object>。
hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
常用命令
hset <key> <field> <value>
:给集合中的键赋值hget <key> <field>
:从集合域中取出valuehmset <key1> <field1> <key2> <field2>…
:批量设置hash值hexists <key> <field>
:查看hash表key中,给定域field是否存在,存在1,不存在0hkeys <key>
:列出该hash集合的所有fieldhvals <key>
:列出该hash集合的所有valuehincrby <key> <field> <increment>
:为hash表key中的域field的值加上增量incrementhsetnx <key> <field> <value>
:将哈希表key中的域field的值设置为value,当且仅当域field不存在
- 有序集合(Zset)
zset与普通集合set非常相似,是一个没有重复元素的字符串集合。有序集合的每个成员都关联了一个评分(score),这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员时唯一的,但是评分可以是重复的。
zset底层使用了两个数据结构(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
常用命令
zadd <key> <score1> <value1> <score2> <value2>…
:将一个或多个member元素及其score值加入到有续集key当中。zrange <key> <start> <stop> [WITHSCORES]
:返回有序集合key中,下标在之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。 zrangebyscore key min max [withscores] [limit offset count]
:返回有序集key中,score值介于min和max之间(包括等于min或max)的成员。有序集成员按score值递增(从小到大)次序排列。zrevrangebyscore key max min [withscores] [limit offset count]
:同上,改为从大到小排序。zincrby <key> <increment> <value>
:为元素的score加上增量。zrem <key> <value>
:删除该集合下,指定值的元素。zcount <key> <min> <max>
:统计该集合,分数区间内的元素个数。zrank <key> <value>
:返回该值在集合中的排名,从0开始。