redis中的数据类型String,hash,List,set

发布时间:2021-05-31编辑:dyy阅读(576)

String类型

存储的数据:单个数据,最简单的数据存储类型,也是做常用的数据存储类型

存储数据的格式:一个存储空间保存一个数据

存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数据操作使用

image.png

String类型数据的基本操作

添加/修改数据的指令:set key value

获取数据的指令get key

删除数据的指令del key

image.png

添加/修改多个数据指令:mset key1 value1 key2 value2...

获取多个数据:mget key1 key2...

获取数据字符个数:strlen key

追加信息到原始信息后部(如果信息存在就后加,不存在就新增):append key value

image.png

String类型数据的扩展操作

设置数值数据增加指定范围的值

设置指定的键值加1:incr key

给指定的键加指定的值:  incrby key increment

给指定的键添加指定的小数值:incrbyfloat key  increment 

设置数值减少指定范围的值

设置指定的键值减1:decr key

 给指定的键加指定的值:decrby key increment

image.png

image.png

String作为数值操作,在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转化数值型进行计算

redis所有的操作都是原子性的,采用单线程处理所有的业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响

按数值进行操作的数据,如果原始数据不能转成数值,或者超越了 redis数值上限范围,将会报错(java中long型最大数值)

redis用于控制数据库主键id,为数据库表主键提供生成策略,保障数据库表主键的唯一性,使用于所以数据库,且支持数据库集群


控制数据的生命周期

设置数据存在时间(秒计算):setex key seconds value

设置数据存在时间(毫秒计算):psetx key milliseconds value

image.png

redis控制数据的生命周期,通过数据是否失效控制事务行为,适用于所有具有时效性限定控制的操作


hash数据类型

新的存储需求:对一系列存储的数据进行编组,方便管理,典型引用存储对象信息

需要的存储结构:一个存储空间保存多个键值对数据

hash类型:底层使用哈希表结构实现数据存储  

key+field+value

image.png

hash存储结构优化    

如field数量少,存储结构优化为类数组结构

如field数量多,存储结构使用HashMap结构

hash类型数据的基本操作

●  添加/修改数据:hset key field value

●  获取单个键里面单个field数据:hget key field 

●  获取单个键里面的全部数据源:hgetall ked

●  删除数据:hdel key field1【field2】

image.png

●  添加/修改多个数据:hmset key field1 value1 field2 value2

●  获取多个数据:hmget key field1 field2

●  获取哈希表中字段的数量:hlen key

●  获取哈希表中是否存在指定的字段:hexists key field

image.png

●  获取哈希表中所有的字段名:hkeys key

●  获取哈希表中所以字段的值:hvals key

image.png

设置指定字段的数值数据增加指定范围的值:

●  添加指定的整数:hincrby key field increment

●  添加指定的小数:hincrbyfloat key field increment

image.png

hash类型数据操作的注意事项

  ◆   hash类型下的value只能存储字符串,不允许存储其他的数据类型,不存在嵌套现象,如果数据未获取到对应的值为(nill)

每个hash可以存储232-1个键值对

  ◆   hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但hash设计初衷不是为了存储大量的数据对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用

  ◆   hgetal操作可以获取全部属性,如果内部field过多遍历整体数据会很低,有可能成为数据访问的瓶颈


  ●   hsetnx key field value指令如果field里面的value为空,使用该指令就会改变,如果value不为空就不会修改


redis用于购物车的数据存储设计

redis用于抢购,限购类,限量发放优惠劵、激活码等业务的数据存储结构


String和hash的区别

String:讲究整体性,一次性数据以整体操作,要么一次性更新,要么一次性获取,以读为主,

Hash:可以用field把属性隔离开,常用于更新会比较的灵活,一个群组概念,把一系列的数据库保存到集群当中


LIst数据类型

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分

需要的存储结构:一个存储空间保存对个数据,且通过数据可以提现进入顺序

list类型:保存多个数据,底层使用双向链表存储结构实现,可以通过两边添加数据到列表中

image.png

链表:增删快,查询慢(查询需要从头指针开始查询)

顺序表(数组):查询快,增删慢(直接通过索引查询)


List数据类型基本操作

添加修改数据指令:lpush key vaule   [value2](从左边添加数据,最后添加的数据在0号索引) 

image.png

 rpush key vaule1 [value2](从右边添加数据,添加的第一个数据在0号索引)

image.png

获取数据指令:lrange key start stop 

获取指定索引的数据:lindex key index

获取数据长度:llen key

获取移除数据:lpop key (从左边删除数据)   rpop  key(从右边删除数据)

规定时间内获取并移动数据: blpop key1 [key2] timeout (指定时间从左边开始删除)

brpop key1 [key2] timeout (指定时间从右边开始删除)

移除指定的数据:lrem key  count value 

redis  应用于具有 操作先后顺序的数据控制


list中保存的数据都是string类型的,数据总容量是有限的,最多232-1个元素

list具有索引的概念,但是操作数据是通常以队列的相识进行入队列出队的操作或以栈到的显示进行入栈出栈的操作

获取全部数据操作结束索引设置为-1

list可以对数据进行分页操作,通常第一页的信息来自于list,第二页及更多的信息通过数据库的形式加载


redis用于最新消息的展示


Set数据类型

新的存储需求:存储大量的数据,在查询方面提供更改的效率

需要的存储结构:能够大量的数据,高效的内部存储机制,便于查询

set类型:与hash存储结构完全相同,仅存储键,不存储值并且值是不允许重复的

image.png

添加数据:sadd key member1 [member2]

获取全部数据:smembers key 

删除数据:srem key member1 [member2]

获取集合数据总量:scard key

判断集合中是否包含指定数据:sismember key member

求两个集合的交集:sinter key1 [ key2]

求两个集合的并集:sunion key1 [key2]

求两个集合的差集:adiff key1 [key2]


求两个集合的交集并存储到集合中:sinterstore destination key1 [ key2]

求两个集合的并集并存储到集合中sunionstore destination key1 [key2]

求两个集合的差集并存储到集合中adiffstore destination key1 [key2]

将指定数据从原始集合中移动目标集合中:smove source destination  member


set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份

set虽然和hash的存储结构相同,但是无法启动hash中存储值的空间


redis 应用于同类数据类型的快速去重





rer

rere\r



标签

上一篇:认识redis

下一篇:mysql实战一

评论