Redis 的数据结构(一)

202 阅读2分钟

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

前言

redis 作为非关系型数据库,在这几年大火的一个非关系型数据库,有人把它当做数据库,也有人把它用于作为中间件的,因为它本身通过内存实现,他的速度肯定比常规数据库硬盘存储要更快,同时也带来了风险也就是内存断电即失的特性,使得大家都不会把重要数据存入redis。但是这也不能说redis就毫无用处,相反Redis在缓存在做缓存与中间件上还是非常成功,成功到可能找不到替代品。

image.png

万物皆为 key value

正如标题所说,redis 你可以把他想象成一个巨大的Map,它本身存储结构就是key value的形式存储数据,redis总共有16个数据库也就是 0 -15。

String 字符串

这是redis 中最常用的类型之一,一个key对应一个value ,value存放json字符串或者你需要的数据。 String是可以存放任何东西的,包括base64后的图片

 // mouth 为 key
 //value 为 value
set mouth value

get mouth
得到 value

Hash 哈希

hash在我这里理解他更像是一个key中存放了一堆map对象,你可通过hset 来设置 key value hash,也可以通过hgetall 来获取所有的值,也可以通过hget 来获取单个 key value


hset a b c
hget a b
c

hgetall a
b
c

hash也是常用于缓存,或者存放一些临时数据。

list 列表

这个列表很有意思,这里先列出来代码指令, 列表可以实现存放多个值,在这个队列中你可以使用 lpush lpop实现简单的栈 也可以使用lush rpop来实现队列,通过不同的组合甚至可以实现中间件的特性,也就是消息队列等用途

指令描述
lpush将一个或多个插入到列表头部
lpop取出列表第一个元素,移出也就是会删除掉
ltrim保留指定区间内的元素,不在指定区间的删除
brpop弹出最后一个元素
rpop在列表中 添加值
lpush testlist test1 

lpush testlist test2

lpush testlist test3

使用lrange来展示列表存放那些内容

lrange testlist

test3
test2
test1

由此可见他是一后进先出的顺序,存储为栈的数据结构

list常用场景经常作为热点新闻,排行榜,人气榜单等使用。

总结

  1. redis 中常用String基本能满足80%的程序员工作
  2. 不要满足于String的好处,redis中的数据结构有很多妙用的地方
  3. list的使用场景非常广泛,并且开放很高