Redis是以键值对的方式存放数据的。
一、Redis的key键操作
以下命令中的key表示的是键的名字。
命令 | 描述 |
---|---|
keys * | 查看当前库所有的key |
exists key | 判断某个key是否存在 |
type key | 查看key的类型 |
del key | 删除指定的key数据 |
unlink key | 根据value选择非阻塞删除 仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作中 |
expire key 10 | 为指定的key设置过期时间,10表示10秒 |
ttl key | 查看还有多少秒过期,-1表示永不过期,-2表示已经过期 |
数据库的操作:
命令 | 描述 |
---|---|
select n | 切换数据库(0——15) |
dbsize | 查看当前数据库的key的数量 |
flushdb | 清空数据库 (慎用) |
flushall | 清空所有数据库 (就算跑路最好也别用) |
二、Redis操作String命令
String是二进制安全的类型,可以包含任何数据,包括图片和序列化的对象。Redis中字符串的value值最大可以是512M。
命令 | 描述 |
---|---|
set key value | 加一个键值对(key: value), 或更新键值对的值(键已存在的情况下) |
get key | 通过key(键)获取value(键的值) |
append key value | 加一个键值对(key: value) 或在值后边追加value(键已存在的情况下) |
strlen key | 获取值的长度 |
setnx key value | 键不存在,新建一个键值对(key: value),存在则不操作 |
incr <key> | 将key中存储的数字增1(只能对数字操作) |
decr <key> | 将key中存储的数字减1(只能对数字操作) |
incrby <key> <step> | 将key中存储的数字加step(只能对数字操作) |
decrby <key> <step> | 将key中存储的数字减step(只能对数字操作) |
同时设置多个值:
命令 | 描述 |
---|---|
mset key1 value1 key2 value2 … … | 同时设置多个键值对 |
mget key1 key2 … | 同时获取多个键的值 |
msetnx key1 value1 key2 value2 | 同时设置多个键值对,当且仅当所有给定的key都不存在的时候 |
注意:mset、mget 和 msetnx 命令具有原子性,有一个失败则失败。
其他命令:
命令 | 描述 |
---|---|
getrange key startIndex endIndex | 获取key从startIndex到endInde的值(前包后包) |
setrange key index value | 在key的第index位插入value |
setes key time value | 设置键值对的同时,设置过期时间为time秒 |
getset key newValue | 获取key的旧值,然后将key的值改为newValue |
三、Redis操作List命令
Redis的List 指的是 一键多值。 底层是快速链表(quicklist),其实就是链表和ziplist(压缩列表)的结合。我们可以将元素插入到头部或者尾部。他对两端的操作性很高,通过索引和下标的操作中间节点的性能较差。
命令 | 描述 |
---|---|
lpush key value1 value2 … valuen | 从左边插入一个或多个值 |
rpush key value1 value2 … valuen | 从右边插入一个或多个值 |
lpop key | 从左边弹出一个值,没有值的时候,键就没了 |
rpop key | 从右边弹出一个值,没有值的时候,键就没了 |
rpoplpush key1 key2 | 弹出key1左边的值放到key2的右边 |
lrange key start stop | 按照索引从start到stop到key中取值(左闭右闭) 从0到-1表示取所有的值 |
lindex key index | 按照索引下标获取元素 |
llen key | 获取列表的长度 |
linsert key before value newValue | 找到key中的value,并在这个value前面插入newValue |
linsert key after value newValue | 找到key中的value,并在这个value后面插入newValue |
lrem key n value | 从左往右删除n个value值 |
lset key index value | 将下标为index的值替换为value |
注意:
1、lpush从左边插入值,第一个插入的值最后会被推到最右边,最后一个插入的值会在最左边。(rpush则反之)
2、只有rpoplpush,没有什么lpoprpush, lpoplpush之类的。
3、只有lrange,没有rrange。其中,第一个参数是起始位,最后一个参数数末位,正数表示从左往右第m个数(从0开始计数),负数表示从右边数第n个数。如果使用lrange -1 -2 ,那么结果为empty。(没法通过两个负数实现“rrange”)
四、Redis操作Set命令
Set数String类型的无序集合,底层是一个value为null的Hash表,增删查的时间复杂度为O(1)。
Set和List的区别在于:Set是自动排序的。
命令 | 描述 |
---|---|
sadd key value1 value2 … valuen | 将所有还未存在的value添加到集合key中 |
smembers key | 取出key集合所有的值 |
sismember key value | 判断集合key中是否包含value,有则返回1,没有返回0 |
scard key | 返回key集合元素的个数 |
srem key value1 value2 … valuen | 删除key集合中的某个或某几个元素 |
spop key | 随机从key集合中弹出一个值(会删除弹出数据) |
srandmember key n | 随机从key集合中返回n个值(不删除返回数据) |
smove source destination value | 将source中的value值移动到destination集合。 |
sinner key1 key2 | 返回 集合key1 和 集合key2 的交集(key1和key2都有) |
sunion key1 key2 | 返回 集合key1 和 集合key2 的并集(key1中有或key2中有) |
sdiff key1 key2 | 返回 集合key1 和 集合key2 的差集(key1中有,key2中没有) |
五、Redis操作Hash命令
Redis的Hash是一个键值对集合,是一个string类型的field和value的映射表;特别适合用于存放对象。类似于Java中的Map<String ,Object>。
存储示意图:(user是string;id、name和age是field;1、张三、20数value)。
命令 | 描述 |
---|---|
hset key field value | 给key集合中的 field 赋值 value |
hget key field | 从key集合中取出field的value值 |
hmset key field1 value1 field2 value2 … | 给key集合中的field1赋值value1,field2赋值value2 |
hexists key field | 查看key集合中是否有field |
hkeys key | 列出key集合中所有的field值 |
hvals key | 列出key集合中所有的value值 |
hincrby key field increment | 为集合key的field的value值加1 |
hsetnx key field value | 当且仅当field不存在的时候,为field赋值value。 |
Hash类型对应的数据结构有两种:ziplist(压缩列表),hashtable(哈希表)。当field-value 长度较短的时候,使用的数ziplist,否则使用hashtable。
六、Redis操作Zset。
Redis的Zset与普通集合set非常类似。是一个没有重复元素的字符串的集合。
不同之处是,有序集合的成员都被关联了一个评分(score),通过这个评分将集合中的成员按照从低到高级进行排序。其中,成员是唯一的,但是评分可以重复。
由于元素是有序的,因此,我们可以通过评分(score) 或者 次序(position) 来获取一个范围的元素。
访问有序集合的中间元素也是非常快的。因此,我们可以使用有序集合作为一个没有重复成员的智能列表。
命令 | 描述 |
---|---|
zadd key score1 value1 score2 value2 … | 添加一个或多个元素及其score值 |
zrange key start stop [WITHSCORES] | 返回key中下标在start到stop之间的元素 加了WITHSCORES,那么分数会一起返回 |
zrangebyscore key min max | 返回key中score在min到max之间的元素(从小到大排序) |
zrevrangebyscore key max min | 返回key中score在min到max之间的元素(从大到小排序) |
zincrby key increment value | 为集合中某元素的score加上increment |
zrem key value | 删除key集合中的value值 |
zcount key min max | 统计该集合,score处于min到max之间的元素个数 |
zrank key value | 返回某个元素在集合中的排名(从0开始) |
Zset底层使用了两个数据结构:
1、hash:关联元素value和权重score,保障元素value的唯一性,可以通过value找到对应的score。
2、跳跃表:给元素value排序,根据score的范围获取元素列表。