redis数据结构

公用命令

命令注解
SET key value增加键值对
KEY *查询当前库的所有键
EXISTS key判断某个键是否存在
TYPE key查看建的类型
DEL key删除某个键
EXPIRE key 过期时间为键值对设置过期时间(单位:秒)
TTL key查看还有多少秒过期(-1表示永不过期 -2表示已过期)
DBSIZE查看当前数据库的key值的数量
FLUSHDB清空当前库
FLUSHALL通杀全部库

String

常用操作

string类型是二进制安全的,redis的string可以包含任何数据,如图像、序列化对象。一个键最多能存储512MB。二进制安全是指,在传输数据的时候,能保证二进制数据的信息安全,也就是不会被篡改、破译;如果被攻击,能够及时检测出来

命令注解
GET key查询相应的键值对
SET key value增加键值对(key区分大小写)
APPEND key value将给定的<value>追加到原值的末尾
STRLEN key获取值得长度
SETNX key value在value不存在得时候 设置key得值,若存在,则不做任何变化
INCR key将key中存储的数字值增1(只能对数字值操作,如果为空,新增值为1)
DECR key将key中存储的数字值减1(只能对数字值操作,如果为空,新增值为-1)
INCRBY/DECRBY key <步长>将key中储存的数字值增减,自定义步长
MSET key1 value1 key2 value2同时设置一个或者多个key-value
MGET key1 value1 key2 value2同时获取一个或多个value
MSETNX key1 value1 key2 value2同时设置一个或者多个key-value(当且仅当所有给定都不存在)
GETRANGE key 起始位置 结束位置获取值的范围(类似java中的substring)
SETRANGE key 起始位置 value<value><key>所储存的字符串值,从起始位开始
SETEX key 过期时间 value设置键值的同时设置时间(单位-秒)
GETSET key value以旧换新,设置了新值同时获得旧值

应用场景

在这里插入图片描述
在这里插入图片描述

  • 计数器:常规Key-Value缓存应用,如微博数、粉丝数、阅读数。INCR本身就具有原子性特性,所以不会有线程安全问题

    INCR article:readcount:{文章id}

    GET article:readcount:{文章id}

  • WEB集群共享

    spring session +redis实现session共享

  • 分布式系统全局序列号

    INCRBY orderld 1000 //redis批量生成序列号提升性能

Hash

个人理解hash是双重key-value ,key指的是最外层键,field-value 指的是值,field指的是最内层键,value指的是值。hash是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},…fieldN,valueN}}

img

常用操作

命令注解
HSET key field value存储一个哈希表key的键值
HSETNX key field value存储一个不存在的哈希表key的键值
HMSET key field value [field value …]在一个哈希表key中存储多个键值对
HGET key field获取哈希表key对应的field值
HMGET key field [field …]批量获取哈希表key中多个field键值
HEDL key field [field … ]删除哈希表key中的field键值
HLEN key返回哈希表key中field的数量
HGETALL key返回哈希表key中所有键值对
HINCRBY key field increment为哈希表key中field键的值加上增量increment

应用场景

  • 对象缓存

在这里插入图片描述

HMSET user {userId}:username cuihao {userId}:age 18

例:HMSET user 1:username cuihao 1:age 18

HMGET {userId}:username {userId}:age

例:HMGET 1:username 1:age

  • 淘宝购物车

在这里插入图片描述

例如:

命令注释
hset cart:1007 10081 1添加用户id为1007的商品id为10081的信息(10081为商品id,数量为1)
hset cart:1007 10081 9修改用户id为1007的商品id为10081的数量为9
hincrby cart:1007 10081 1添加用户id为1007的商品id为10081的数量为1
hincrby cart:1007 10081 -1减少用户id为1007的商品id为10081的数量为1
hdel cart:1007 10081删除用户id为1007的商品id为10081的信息
hget cart:1007 10081获取用户id为1007的商品id为10081的数量
hgetall cart:1007获取用户id为1007的所有商品信息

优缺点

  • 优点

    1)同类数据归类整合储存,方便数据管理

    2)相比string操作消耗内存与cpu更小

    3)相比string操作更节省空间

  • 缺点

    1)过期功能不能使用到field上,只能使用到key上

    2)redis集群架构下不适用大规模使用

List

List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。

img

使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。本人还用一个场景,很合适—取行情信息。就也是个生产者和消费者的场景。LIST可以很好的完成排队,先进先出的原则

常用操作

命令注解
LPUSH/RPUSH key value1 value2从最左边/最右边插入一个或者多个值
LRANGE key start stop按照索引下标获得元素(从左到右 从零开始)
LINDEX key index按照索引下标获得元素(从左到右 从零开始)
LLEN key获取列表长度
LPOP key从左侧移除一个元素(即移除第一个元素)
RPOP key从右侧移除一个元素(即移除最后一个元素)
BLPOP key1 key2 timeout从key列表表头弹出一个元素,若没有元素,阻塞等待timeout秒,若timeout=0,则一直阻塞等待
BRPOP key1 key2 timeout从key列表表尾弹出一个元素,若没有元素,阻塞等待timeout秒,若timeout=0,则一直阻塞等待

应用场景

  • 常用数据结构

    Stack(栈)=LPUSH+LPOP ->FILO 栈:先进后出

    Queue(队列)=LPUSH+LPOP 队列:先进先出

    Blocking MQ(阻塞队列)=LPUSH +BRPOP

  • 微博和微信公众号消息流
    在这里插入图片描述
    在这里插入图片描述

Set

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

img

常用操作

命令注释
SADD key member1 member2往集合key中注入元素,元素存在则忽略,若key不存在则新建
SREM key member1 member2从集合key中删除元素
SMBMBERS key获取集合key中的所有元素
SCARD key获取集合key中元素的个数
SISMEMBER key member判断member元素是否存在于集合key中
SRANDMEMBER key [count]从集合key中选中count个元素,元素不从key中删除
SPOP key [count]从集合key中选中count个元素,元素从key中删除

运算操作

命令注释
SINTER key1 key2交集运算
SINTERSTORE destination key1 key2将交集结果存入新集合destination中
SUNION key1 key2并集运算
SUNIONSTORE destination key1 key2将并集结果存入新集合destination中
SDIFF key1 key2差集运算
SDIFFSTORE destination key1 key2将差集结果存入新集合destination中

应用场景

  • 微信抽奖小程序

在这里插入图片描述

  • 微信微博点赞、收藏、标签

在这里插入图片描述

  • 集合操作实现微博微信关注模型

在这里插入图片描述

zset

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。
有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同。

常用操作

命令注释
ZADD key score member [[score member]…]往有序集合key中加入带分值元素
ZREM key member1 member2从有序集合key中删除元素
ZSCORE key member返回有序集合key中元素member的分值
ZINCRBY key increment member为有序集合key中元素member的分值加上increment
ZCARD key返回有序集合key中元素个数
ZRANGE key start stop [WITHCORES]正序获取有序集合key从start下标到stop下标的元素
ZREVEANGE key start stop [WITHSORES]反序获取有序集合key从start下标到stop下标的元素

集合操作

命令注释
ZUNIONSTORE destkey numkeys key1 key2并集计算
ZINTESTORE destkey numkeys key1 key2交集计算

应用场景

  • 微博排行榜
    在这里插入图片描述

更多应用场景

  • 微博、微信、陌陌<附近的人>
  • 微信<摇一摇> <抢红包>
  • 滴滴打车、摩拜单车<附近的车>
  • 美团和饿了么<附近的餐馆>
  • 搜索自动补全
  • 布隆过滤器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值