redis 基本数据类型简介

1、含义

Redis(Remote Dictionary Server)由C语言开发的一款作为内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件。它的value支持多种类型的数据结,基本数据结构包括:字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted set)五种

2、字符串(strings)

2-1、类型介绍

字符串是Redis最简单的存储类型,它存储的值可以是字符串、整数或者浮点数,对整个字符串或者字符串的其中一部分执行操作;对整数或者浮点数执行自增(increment)或者自减(decrement)操作

Redis的字符串是一个由字节组成的序列,跟Java的ArrayList有点类似,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容一次只会多扩1M的空间。需要注意的是字符串最大长度为512M

2-2、使用场景

字符串类型在工作中使用广泛,主要用于缓存数据,提高查询性能。比如存储登录用户信息、电商中存储商品、可以做计数器等等

2-3、操作命令

set key value:添加一条String类型数据
get key:获取一条String类型数据
mset key value [key value ...]:批量添加String类型数据
mget key [key ...]:批量获取String类型数据
incr key:自增(+1)
decr key:自减(-1)
incrby key step:按照步长(step)自增
decrby key step:按照步长(step)自减

3、散列(hashes)

3-1、类型介绍

散列相当于Java中的HashMap,内部是无序字典。实现原理跟HashMap一致。一个哈希表有多个节点,每个节点保存一个键值对。

与Java中Hash不同的是,rehash的方式不一样,因为Java的HashMap在字典很大时,rehash是个耗时的操作,需要一次性全部rehash。Redis为了高性能,不能堵塞服务,所有采用渐进式rehash策略

渐进式rehash会在rehash的同事,保留新旧两个hash结构,查询会同时查询两个hash结构,然后在后续的定时任务中以及hash操作指令中,循序渐进地将旧hash的内容一点点迁移到新的hash结构中。当搬迁完成了,会使用新的hash结构取而代之。

当hash移除了最后一个元素之后,该数据结构自动被删除,内存被回收

3-2、使用场景

Hash也可以同于对象存储,比如存储用户信息、用户购买记录,与字符串不一样的是,字符串是需要将对象进行序列化之后才能保存,而hash则可以将用户对象的每个字段单独存储,这样就能节省序列化和反序列化

3-3、操作命令

hset key field value [field value ...]:存储hash
hget key field:获取hash
hexists key field:判断是否存在
hlen key:获取长度

4、列表(lists)

4-1、类型介绍

Redis中的lists相当于Java中的LinkedList,实现原理是双向列表(其实底层就是一个快速列表),即可以支持反向查询和遍历,更方便操作。查询和删除操作非常快,时间复杂度为0(1),但是索引定位很慢,时间复杂度为O(n)

4-2、使用场景

利用它可以轻松实现热销榜;可以实现工作队列(利用lists的push操作,将任务存在lists中,然后工作线程再用pop操作将任务取出进销执行);可以时间最新列表,比如最新评价等

4-3、操作命令

linsert key BEFORE|AFTER pivot value:在什么之前或之后插入  
lpush key value [value ...]:链表从左往右添加数据
rpush key value [value ...]:链表从右往左添加数据
lrange key start stop:按指定位置查看list的链表式
lindex key index:获取list的指定索引的元素
lpop key:从左往右链接式删除指定key
rpop key:从右往左链接式删除指定key
lrem key count value:如果是包含0在内的整数,是从前往后删,如果是负数是从后往前删
lset key index value:修改一个索引为几的value值
ltrim key start stop:只保留指定范围内的元素,删除不在范围内的元素
llen key:查看list的长度
# 批量操作set /get
hmset key field value [field value ...]
hmget key field [field ...]
hdel key field [field ...]:删除hash
hkeys key:查看所有hash字段
hgetall key:查看所有hash
hincrby key field increment:自增,increment如果是字符串就会报错

5、集合(sets)

5-1、类型介绍

集合类似Java中的HashSet,内部实现是一个value永远为Null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因

5-2、使用场景

redis的sets类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删查改,并且支持多个集合间的交集,并集,差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。比如计算网站独立IP,用户画像中的用户标签,共同好友等功能

5-3、操作命令

sadd key member [member ...]:添加
srem key member [member ...]:删除
smembers key:查询所有key
scard key:计算集合的大小
sismember key member:判断set集合中的元素是否存在
spop key [count]:随机删除任何一个元素
sdiff key [key ...]:差集
sinter key [key ...]:交集
sunion key [key ...]:并集
sunionstore destination key [key ...]:把key1,key2,key3.....的并集存储到一个新的destination集合上  
sinterstore destination key [key ...]:把key1,key2,key3.....的交集存储到一个新的destination集合上
sdiffstore destination key [key ...]:把key1,key2,key3.....的差集存储到一个新的destination集合上

6、有序集合(storted sets)

6-1、类型介绍

storted sets是Redis类似于SortedSet和HashMap的集合体,一方面它是一个set,保证了内部value的唯一性,另一方面它可以给每个value赋予一个score,代表这个value的排序权重。内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获取比较高的查询效率,并且在实现上比较简单。storted sets中最后一个value被移除后,数据结构自动删除

6-2、使用场景

主要应用于根据某个权重进行排序的队列的场景。比如游戏积分排行榜,设置优先级的任务列表,学生成绩等等

6-3、操作命令

zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]:添加
zscore key member:查看当前集合中key的数字  
zcard key:总记录数
zrem key member [member ...]:删除当前集合中key
zincrby key increment member:给有序set集合中的key的member加increment分
zcount key min max:查看最小-最大范围内有多少元素

7、通用命令

del key [key ...]:删除一个key
exists key:判断key是否存在,1代表存在|0代表不存在
incrbyfloat key increment:float的自增类型
getrange key start end:获取字符串指定下标的所有值
setrange key index value:设置指定下标对应的值
expire key value:设置过期时间
ttl key:查看过期时间
persist key:去掉过期时间
type key:查看key的类型
keys *:输出所有的key
dbsize:输出key的数量
flushdb:删除该数据库下的全部数据
flushall:删除redis服务器下的所有数据库的数据(16张数据库的数据全部清理干净)
clear:清屏
keys *value*:模糊查询
rename key newkey:key重命名
select index:切换数据库
move key db:把当前数据库的key移植到几号数据库

redis 基本数据类型简介

上一篇:DocumentFormat.OpenXml.dll通過word做好的模板生成word


下一篇:SharePoint online文档库中文件夹及文件分享方式论述