文章目录
前言
本篇主要讲Redis的五大数据类型
一、Redis 键相关的基本命令
查询当前库的所有键
keys *
判断某个键是否存在
exists <key>
查看键的类型
type <key>
删除某个键
del <key>
为键值设置过期时间,单位秒。
expire <key> <seconds>
查看还有多少秒过期,-1表示永不过期,-2表示已过期
ttl <key>
查看当前数据库的key的数量
dbsize
清空当前库
Flushdb
通杀全部库(别用啊!通杀十六个库)
Flushall
二、Redis 字符串(String)
➢ String是Redis最基本的类型,你可以理解成与Memcached-模一样的类型,一个key对应一 个value
➢ String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
➢ String类型是Redis最基本的数据类型,-个Redis中字符串value最多可以是512M
- 查询对应键值
get <key>
- 添加键值对
set <key> <value>
- 将给定的 追加到原值的末尾
append <key> <value>
- 获得值的长度
strlen <key>
- 只有在key不存在时设置key的值
setnx <key> <value>
- 将key中储存的数字值增1
- 只能对数字值操作,如果为空,新增值为1
incr <key>
- 将key中储存的数字值减1
- 只能对数字值操作,如果为空,新增值为-1
. decr <key>
- 将key中储存的数字值增减。自定义步长。
incrby / decrby <key> <步长>`
- 同时设置一个或多个key-value对
mset <key1> <value1> <key2> <value2>
- 同时获取一个或多个value
mget <key1> <key2> <key3> ...
- 同时设置一个或多个key-value对,当且仅当所有给定 key都不存在。
注意:当所有 key 都成功设置,返回 1 。 如果所有给定 key 都设置失败(至少有一个 key 已经存在),那么返回 0 。
msetnx <key1> <value1> <key2> <value2>
- 获得值的范围,类似java中的substring
getrange <key> <起始位置> <结束位置>
- 用value覆写key 所储存的字符串值,从<起始位置>开始。
setrange <key>. <起始位置> <value>
●设置键值的同时,设置过期时间,单位秒。Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
setex <key> <过期时间> <value>
●以新换旧,设置了新值同时获得旧值。
getset <key> <value>
三、Redis 列表(List)
➢单键多值
➢Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一“个元素导列表的头部(左边)或者尾部(右边)。
➢它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
- 从左边/右边插入一个或多个值。
lpush/rpush <key> <value1> <value2>
- 从左边/右边吐出一个值
- 值在键在,值光键亡。
Redis Rpop 命令用于移除并返回列表的最后一个元素。
lpop/rpop <key>
- rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
从key1列表右边吐出一个值,插到 key2
rpoplpush <key1> <key2>
- 按照索引下标获得元素(从左到右)
lrange <key> <start> < stop>
●按照索引下标获得元素(从左到右),Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
lindex <key> <index>
●Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。
llen <key>
- linsert命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误
linsert <key> before <value> <newvalue>
从左边删除n个value(从左到右)
n 的值可以是以下几种:
n > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
n < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
n = 0 : 移除表中所有与 VALUE 相等的值。
lrem <key> <n> < value>
下表列出了列表相关的基本命令:
序号 | 命令 | 描述 |
---|---|---|
1 | BLPOP key1 [key2 ] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
2 | BRPOP key1 [key2 ] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
3 | BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
4 | LINDEX key index | 通过索引获取列表中的元素 |
5 | LINSERT key BEFORE|AFTER pivot value | 在列表的元素前或者后插入元素 |
6 | LLEN key | 获取列表长度 |
7 | LPOP key | 移出并获取列表的第一个元素 |
8 | LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
9 | LPUSHX key value | 将一个或多个值插入到已存在的列表头部 |
10 | LRANGE key start stop | 获取列表指定范围内的元素 |
11 | LREM key count value | 移除列表元素 |
12 | LSET key index value | 通过索引设置列表元素的值 |
13 | LTRIM key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
14 | RPOP key | 移除并获取列表最后一个元素 |
15 | BRPOPLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
16 | RPUSH key value1 [value2] | 在列表中添加一个或多个值 |
17 | RPUSHX key value | 为已存在的列表添加值 |
四、Redis 集合(Set)
➢Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一 个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
➢Redis的Set是string类型的无序集合。它底层其实是一个value,为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
- Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
- 假如集合 key不存在,则创建一个只包含添加的元素作成员的集合。
- 当集合 key 不是集合类型时,返回一个错误。
sadd <key> <value1> <value2> .....
- 取出该集合的所有值。
smembers <key>
- 如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0 。
sismember <key> <value>
- 返回集合的数量。 当集合 key 不存在时,返回 0 。
scard <key>
- 删除集合中的某个元素。
srem <key > <value1> <value2> ....
- 随机从该集合中吐出一个值。
spop <key>
- 随机从该集合中取出n个值。 不会从集合中删除
srandmember <key> <n>
- 返回两个集合的交集元素。
sinter <key1> <key2>
- 返回两个集合的并集元素。
sunion <key1> <key2>
- 返回两个集合的差集元素。不存在的集合 key 将视为空集。(返回显示只是key1有的而key2没有的)
sdiff <key1> <key2>
五、Redis 哈希(Hash)
- Redis hash是一个键值对集合。
- Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
- 类似Java里面的Map<String,String>
- Hset 命令用于为哈希表中的字段赋值 。 如果哈希表不存在,一个新的哈希表被创建并进行 HSET操作。如果字段已经存在于哈希表中,旧值将被覆盖。
- hset <key> <field><value>
- 从key1集合field取出value
hget <key1> <field>
- Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。 如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
hmset <key1> <field1> <value1> <field2> <value2>
- 查看哈希表.key中,给定域field是否存在。
- hexists key <file>
- 列出该hash集合的所有field
hkeys key
- 列出该hash集合的所有value
hvals <key>
- 为哈希表key 中的域field的值加上增量increment
hincrby <key> <field> <increment>
- 将哈希表key中的域field 的值设置为value,当且仅当域 field不存在.
hsetnx <key> <field> <value>
六、Redis 有序集合(sorted set)
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。
因为元素是有序的,所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
- 将一个或多个member元素及其score 值加入到有序集key当中。
zadd <key> <scorei1> <valuei> <score2> <value2>...
- 返回有序集key 中,下标在start ,stop之间的元素·带WITHSCORES,可以让分数一起和值返回到结果集。
zrange <key> <start> <stop>[WITHSCORES]
- 返回有序集key中,所有score 值介于min和max之间(包括等于min或max )的成员。有序集成员按score值递增(从小到大)次序排列。
zrangebyscore key min max [withscores][limit offset count]
同上,改为从大到小排列。
zrevrangebyscore key max min [withscores] [limit offset count]