Redis数据结构及相应命令

主要介绍基本的数据结构,具体的介绍、命令可以参考官网,命令手册:redis命令手册

一、五种基本数据结构

1、string     

动态字符串(SDS),类似于 Java 的 ArrayList

采用预分配冗余空间的方式减少内存的频繁分配

长度小于 1M 时,扩容 == 加倍现有的空间;长度超过 1M 时,一次只会扩容 1M

最大长度为512M

【命令】

set key value  / get key 

mset k1 v1 k2 v2 k3 v3 / mget k1 k2 k3

expire key X秒 / setex key X秒 value

setnx k v

incr key / incrby key step(int)

decr key / decrby key step(int)

2、hash

相当于Java中的 HashMap,数组+ 链表,无序字典

渐进式rehash,保留新、旧两个hash结构,逐渐完成数据的迁移

可以用来存储用户的基本信息,每个字段单独存储,优于 string 的 一次性全部序列化

缺点:实际存储消耗高于string,具体情况以实际情况权衡

hset key field value

hgetall key

hget key field

hlen key

hmset k field1 value1 field2 value2 field3 value3

hincrby key field setp(int)

3、list

相当于Java中的 LinkedList,底层时链表,插入/删除 时间复杂度 O(1) ,查询 时间复杂度 O(n) 

双向链表

常用来做异步队列使用

rpush key 1 2 3 4 

llen  key

lpop key

lpush key 1 2 3 4 

rpop key

【慢操作】

lindex  key index(0~)

ltrim key start_index end_index

lrange key start_index end_indext

【快速列表 quicklist】

列表元素较少的情况下,使用一块连续的内存存储,这个结构是 ziplist (压缩列表)

4、set

相当于 Java 中 HashSet,键值对无序,但是唯一,具备去重功能。

内部实现相当于一个特殊的字典,value 都是 NULL

sadd key field      //单个设值

sadd key field1 field2 field3      //批量设值

smembers key      //查询全部数据

sismember key field       // 获取某个value 是否存在

scard key      //获取长度

spop key      //弹出一个

5、sorted set

相当于SortedSet \ HashMap 的结合体,即保证唯一性,也保证排序权重

zadd key score field

zrange key  0 -1  //正序输出

zrevrange key 0 -1 //逆序输出

zcard  key //相当于 count()

zscore key field

zrank key field

zrangebyscore key  start_score end_score

zrem key field    // 删除

【跳跃链表】

重点补充

容器型数据结构的通用规则

list 、set、hash、zset 属于容器型数据结构

1、create if not exists,容器不存在,则创建一个

2、drop if no elements,容器中没有元素了,立即删除容器、释放内存

过期时间

过期以对象为基本单位

字符串重新 set value,过期时间会失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值