Redis数据类型

本文详细介绍了 Redis 中四种主要数据结构:散列、列表、集合及有序集合的特点与操作方法,帮助读者快速掌握 Redis 的基本使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、散列类型:

Redis中的 散列类型类似于Map,但是,有一点需要注意的是,Redis中的散列类型的键所对应的值只能是字符串,不支持其他数据类型,也不能嵌套其它的数据类型
比如一个文章类型,title对应文章标题,content对应内容,那么其就可以看成是一个散列类型,也可以看成是一个Map,那么,使用Redis声明一个散列对象方法如下:
  1、生成一个id为1的文章散列对象(我们建议键名由 ‘类型:id’来构成)
  hset article:1 title fristarticle
  
  Redis的强大之处在于不区分插入和更新操作,Redis发现键不存在时,即为插入操作,如果发现键存在,即为更新操作。
 
  2、修改散列对象值:
   hset article:1  title fristarticlechange

 3、设置多个字段的值
  hmset article:1title fristarticlechange content aaa

  4、得到一个键对应的所有值
  hgetall article:1
 
  5、判断字段是否存在
  hexists article:1 url
  存在即返回0,不存在即返回1

  6、当字段不存时赋值:
  hsetnx article:1 url  nx

  当所对应字段有值时,不更新,没有值时,插入。

  7、增加字段的值
  散列类型没有字符串类型的incrby命令,但是有一个hincrby命令,可以增加指定的字段值
  hincrby article:1  readcount  10

  8、删除字段:
  hdel article:1 readcount

  9、获取散列对象中所有的字段名称
   hkeys article:1

  10、获取散列对象中所有字段对应的值
  hvals article:1

  11、获取散列对象中字段的数量
  hlen key


二、Redis列表类型:

Redis列表类型内部是使用双向链表来实现的,即类似于Java中的LinkedList,所以查询两端的速度会很快。
Redis既支持向左插入数据,也支持向右插入数据。
  
1、向左插入一条数据:
    lpush  list a

2、向右插入一条数据:
    rpush  list  b

3、从列表中弹出数据:
    lpop list(从列表左边弹出数据)
    rpop list  (从列表右边弹出数据)
会先将数据弹出来,然后返回弹出来的数据

4、获取列表中元素的个数:
    llen list

5、获取列表片段:
    lrange  list  0   2   (注意这个是从左边开始数的)
 因为是从0开始的,所以其会返回第一个、第二个、第三个的数据。
    Redis支持负索引,即从右边开始计算序数,如"-1"表示最右边的第一个元素,"-2"表示最右边的第二个元素。
    lrange  list  -2  -1
    所以使用  lrange  list  0  -1 可以获取Redis中所有的元素。

6、删除列表中指定的值:
    lrem  key  count  value
    lrem会删除列表中前count个值为value的元素,返回值是实际删除的元素个数

    比如
    lrem  list  1  a
    删除1个值为a的元素

   注意,如果count大于0,那么会从左边开始删除前count个值为value的元素。
   如果count小于0,那么会从右边开始删除前count个值为value的元素。
   如果count为0,那么会删除所有值为value的元素。

7、获取指定索引的元素值:
lindex  list  0  获取左数第一条
lindex  list  -1  获取右数第一条

8、重新设置指定索引值的元素值:
lset   list  0  m  设置第一条元素之为m

9、只保留指定片段数据:
ltrim list  1  2
即只保留list数组中第一个和第二个元素,其余都删除

10、向列表中插入数据:
linsert  key  before|after  pivot  value
Redis首先会从列表从左到右的查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前面还是后面

linsert  list  before  m  n
在列表中值为m的元素前面插入一个元素n

11、将元素从一个列表转移到另外一个列表
rpoplpush  source  deftination
rpoplpush会先从source列表的右边弹出一个元素,然后将其加入到deftination列表的左边,并返回这个元素的值。


三、Redis集合类型:

集合类型的特点是内部储存的数据是无序的,且其内部储存的数据是不能相等的。

集合是使用值为空的散列表来实现的,所以,集合的操作时间复杂度为o(1),并且多个集合类型之间还可以进行并集、交集和差集。

1、增加元素
    sadd  article:1:tags  boy girl

2、删除元素:
    srem  article:1:tags  boy

3、获取集合中的所有元素:
    smembers  article:1:tags

4、判断元素是否在集合中:
    sismember  article:1:tags  girl
当值存在时返回1,当键或值不存在时返回0

5、集合间运算:
    支持交并补

6、获取集合中元素的个数:
    scard  article:1:tags


四、Redis有序集合类型:

Redis有序集合在集合的基础上为每个元素都关联了一个分数,这让我们可以获取分数最高(或者最低)的前N个元素。
下面使用Redis有序集合来存储文章访问量,我们可以为每个文章id加一个访问量分数,这样就可以轻松获取访问量最多的N个文章id。

1、增加元素
    zadd article:readcount 0 1
此为给id为1的文章的分数赋为0,即id为1的文章访问量为0;

2、获取元素的分数
    zscore article:readcount 1
获取id为1的文章的访问量

3、获取排名在某个范围的元素列表
    zrange  article:readcount  0  2
获取按分数从小到大的第一个到第三个的数值,当然,-1也代表最后一个元素
    zrange  article:readcount  0  -1
此为获取分数从小到大的所有列表

4、获取指定分数范围的元素:
    zrangebyscore  article:readcount  1  3
    此为包含端点值

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值