Redis总结梳理-常见操作及复杂度

五种数据结构

字符串 哈希 列表 集合 有序集合
string hash list set sortedset

一、字符串string

redis中的字符串结构可以保存多种数据类型例如:简单的字符串、json、xml、二进制。但是其值的最大长度为512MB。

1. 基本操作

set

1. set key value [ex] [px] [nx|xx]  
    ex : 秒级过期时间  
    px : 毫秒级过期时间  
    nx : 键必须不存在,才可以set成功  (添加)  
    xx : 键必须存在,才可以set成功  (更新)
    
    ps:setnx在多个客户端执行时,也只有一个能成功,所以可以作为分布式锁的一种解决方案
    
2. mset key1 value1 key2 value2 ... (批量设置)

get

1. get key

2. mget key1 key2 ...

del

del key

2. 其他操作

计数

1. incr key 自增(key对应的值必须要为整数,否则报错。如果键不存在,则自动创建该键,值从0开始自增,返回1。)

2. decr key 自减(同incr原则)

3. incrby key increment 指定步长自增

4. decrby key decrement 指定步长自减

5. incrbyfloat key increment 指定浮点数步长自增

6. ...

追加值

append key value (向字符串尾部追加值)

字符串长度

strlen key (单位:字节。一个中文字占3个字节,一个ascii字符占1个字节。)

设置并返回原值

getset key value 

设置制定位置的字符

setrange key offset value

获取部分字符串

    getrange key start end

二、哈希hash

redis中的hash类型也是键值对结构

1. 基本操作

hset

1. hset key field value

2. hmset key field1 value1 field2 value2 ...

hget

1. hget key field

2. hmget key field1 field2 ...

hdel

hdel key field1 [field2 field3 ...]

2. 其他操作

计算field个数

hlen key

判断field是否存在

hexists key field (存在返回1 否则0)

获取所有field

hkeys key

获取所有的value

hvals key

获取所有的field-value

hgetall key

计数

1. hincrby key field increment

2. hincrbyfloat key field increment

计算value的字符串长度

hstrlen key field

三、列表list

redis中的list是一个有序的、可重复元素的列表

1. 基本操作

添加

1. 从右边插入元素
    rpush key value [value ...]
2. 从左边插入元素
    lpush key value [value ...]
3. 向某个元素前或后插入元素
    linsert key before|after pivot value

查找

1. 获取制定范围内的元素列表
    lrange key start stop
    
    ps: 索引下标从左到右为:0~n-1
        索引下表从右到左为:-1 ~ -n
        [start stop] 左闭右闭全包含
        
2. 根据索引获取value
    lindex key index

删除

1.从列表左侧弹出元素
    lpop key
    
2. 从列表右侧弹出元素
    rpop key
    
3. 删除指定元素
    lrem key count value
    
    ps: count>0,从左往右删除count个元素
        count<0,从右往左删除count个元素
        count=0,删除所有元素
4. 修建列表
    ltrim key start stop
    保留[start,stop]之间的元素,之外的全都删掉

修改

1. 修改指定索引下表的元素
    lset key index value 

2. 其他操作

获取列表长度

llen key 

阻塞操作

有blpop和brpop两种操作,暂不总结,知道有它就行。(TODO)

四、集合set

redis中的set是一个不可重复、无序、不同通过索引获取元素的数据结构

1. 基本操作

添加元素

sadd key member [member ...]

删除元素

srem key member [member ...]

集合交集

sinter key1 key2 ...

集合并集

sunion key1 key2 ...

集合差集

sdiff key1 key2 ...

将集合的交集、并集、差集结果保存

1. sinterstore dest key1 key2 key3 ...
2. sunionstore dest key1 key2 key3 ...
3. sdiffstore dest key1 key2 key3 ...

ps: 在redis中进行交并补操作比较耗时,将结果保存起来可以在需要的时候直接smembers获取。

2. 其他操作

计算元素个数

scard key

判断元素是否在集合中

sismember key member(返回1有,否则无)

随机从set中返回指定个数元素

srandmember key count

ps : count > 集合元素个数 , 返回set中的所有元素
     count = 0 ,不返回任何数据
     count < 0 ,随机返回count个元素

随机弹出元素

spop key [count]

ps : 弹出元素后set 中就没有这个元素啦。

获取所有元素

smembers key (返回元素的顺序与sadd的顺序不一定相同。无序!)

五、有序集合

redis中的有序集合是一种元素不可重复,以分数(scores)方式实现的数据结构

1. 基本操作

添加(更新)元素

1.zadd key [nx|xx] [ch] [incr] score member [score member ...]
    nx : 元素必须不存在才可以添加成功
    xx : 元素必须存在才可以设置成功
    ch : 返回此命令执行完成后,有序集合元素和分数发生变化的个数
    incr:对score做增加

删除元素

zrem key member [member ...]

计算成员个数

zcard key 

交集

zinterstore dest numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM | MIN | MAX]

并集

zunionstore dest numkeys key [key ... ] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

2. 其他操作

增加某个元素的分数

zincrby key increment member

返回某个元素的分数

zscore key member

返回元素的排名

1. zrank key member 分数由低到高排名

2. zrevrank key member 分数由高到低排名

返回指定排名范围的元素

1. zrange key start stop [withscores]
2. zrevrange key start stop [withscores]

ps : zrange从低到高排名,zrevrange从高到低排名。加了withscores则连同分数一并返回。

返回指定分数范围的元素

1. zrangebyscore key min max [withscores] [limit offset count]

2. zrevrangebyscore key max min [withscores] [limit offset count]

返回指定分数范围的元素的个数

zcount key min max

删除指定排名内的升序元素

zremrangebyrank key start stop

删除指定分数范围元素

zremrangebyscore key min max

六、复杂度总结

字符串

哈希

列表

集合

有序集合

七、redis两种持久化方式的区别与常用配置

参考: https://www.cnblogs.com/chenliangcl/p/7240350.html

posted @ 2019-03-08 12:30  jacyz  阅读(258)  评论(0)    收藏  举报