细说redis数据类型

本文主要讲解redis的6种数据类型。

string

redis的string可以存储3种数据类型:string,整数和浮点数。

常见的操作如下

命令名称

示例

描述

set

set key value

设置键值对

get

get key

获取值

incr

incr key

递增值

decr

decr key

递减值

strlen

strlen key

获取字符串长度

incrby

incrby key increment

增加指定数字

decrby

decrby key decrement

减少指定数字

append

append key

value

向尾部添加值

getset

getset

key

value

取值并赋值

setnx

setnx

key

value

当value不存在时赋值

String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS),采用预分配冗余空间减少内存的频繁分配,当value长度小于1m时,每次扩大1倍,当大于1m时每次多分配1m的空间,最大为512m。

使用场景:

①计数器

②共享session

③setnx实现分布式锁

list

list是列表结构,可以存储有序、可重复的元素,获取头部或尾部附近的记录是极快的

list的元素个数最多为2^32-1个(40亿)

命令名称

示例

描述

lpush

lpush key v1,v2…

列表左边插入

lpop

lpop key

列表左边弹出

rpush

rpush key v1,v2…

列表右边插入

rpop

rpop key

列表右边弹出

lpushx

lpushx key value

将数值插入列表头部

rpushx

rpushx key value

将值插入列表尾部

llen

llen key

获取列表中元素个数

lindex

lindex key index

获取列表中的下标

lrange

lrange key start end

返回列表中指定区间的元素,区间通过start和end指定

lrem

lrem key count

value

删除列表中与value相等的元素

当count>0时, lrem会从列表左边开始删除;当count<0时,

lrem会从列表后边开始删除;当count=0时, lrem删除所有值

为value的元素

lset

lset key index

value

将列表index位置的元素设置成value的值

ltrim

ltrim key start

end

对列表进行修剪,只保留start到end区间

rpoplpush

rpoplpush

key1 key2

从key1列表右侧弹出并插入到key2列表左侧

brpoplpush

brpoplpush

key1 key2

从key1列表右侧弹出并插入到key2列表左侧,会阻塞

list底层有多种数据类型,数据量少的时候是ziplist压缩列表,内存是连续分配的,当元素个数超过某个值时转为linkedlist双向链表,redis3.2之后数据量较多时改为quicklist。因为普通的链表需要附加指针空间,会浪费空间,加重内存碎片化。redis将链表和ziplist结合组成quicklist。

使用场景:

①用户列表,商品列表,评论列表等

②消息队列

③栈

set

无序不重复,集合中最大的成员数为 2^32 – 1

命令名称

示例

描述

sadd

sadd key v1 v2…

为集合添加新成员

srem

srem key v1 v2 …

删除集合指定成员

smembers

smembers key

获取集合中所有元素

spop

spop key

返回集合中一个随机元素,并将该元素删除

srandmember

srandmember key

返回集合中一个随机元素,不会删除该元素

scard

scard key

获取集合中的数量

sinter

sinter key1 key2 …

求多集合的交集

sdiff

sdiff key1 key2…

求多集合的差集

sunion

sunion key1 key2…

求多集合的并集

set底层有两种数据结构,一种是inset数组,另一种是hashtable,如果保存的所有值都是整数且个数不超过512个则使用inset数组,否则使用hashtable

使用场景:

①统计网站uv

②统计共同好友

sortedset

有序集合,可以通过设置分数来对元素进行排序,元素不能重复,分数可以

命令名称

示例

描述

zadd

zadd key score1 v1 score2 v2…

为集合添加新成员

zrem

srem key v1 v2 …

删除集合指定成员

zcount

zcount key min max

返回分数在[min,max]区间内的元素数量

zincrby

zincrby key increment member

在集合的member分值上加increment

zrank

zrank key member

获取集合中member的排名(按分值从小到大)

zrevrank

zrevrank key member

和zrank相反

zrange

zrange key start end

获取集合中指定区间成员,按分数递增排序

zrevrange

zrevrange key start end

和zrange相反

zset底层是采用ziplist和skiplist结构,ziplist就是地址连续的压缩链表,按照分值从小到大排序,在满足一定条件下会转换成skiplist,即跳表。

使用场景:

①排行榜

hash

String 类型的 field(域)和 value(值)的映射表,每个hash可以存储2^32-1个键值对

命令名称

示例

描述

hset

hset key field value

赋值

hmset

hmset key field1 value1 field2 value2…

批量赋值

hsetnx

hsetnx key field value

赋值,如果值存在则不操作

hget

hget key field

获取一个字段值

hmget

hmset key field1 field2

获取多个字段值

hgetall

hgetall key

获取所有值

hdel

hdel key field

删除指定字段

hincrby

hincrby key field increment

指定字段自增increment

hlen

hlen key

获取字段数量

底层使用hashtable存储数据

使用场景

①存储对象,应用在频繁写操作的场景,string主要用在频繁读操作场景

BitMap

BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态, 其中的 key 就是对应元素本身,实际上底层也是通过对字符串的操作来实现。

命令名称

示例

描述

setbit

setbit key offset value

设置key在offset处的bit值,只能是0或者1

getbit

getbit key.offset

获取key在offset处的bit值

bitcount

bitcount key

获取key的bit位为1的个数

bitpos

bitpos key value

获取第一个值为value的bit的位置

bitop

bitop and[or/xor/not] destkey key

[key …]

对多个key 进行逻辑运算后存入destkey

中

使用场景:

①布隆过滤器

②统计用户每月签到,用户id为key,日期作为偏移量

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年8月11日 13:11
下一篇 2022年8月11日 13:12

相关推荐

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息