这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战
前言
redis 作为非关系型数据库,在这几年大火的一个非关系型数据库,有人把它当做数据库,也有人把它用于作为中间件的,因为它本身通过内存实现,他的速度肯定比常规数据库硬盘存储要更快,同时也带来了风险也就是内存断电即失的特性,使得大家都不会把重要数据存入redis。但是这也不能说redis就毫无用处,相反Redis在缓存在做缓存与中间件上还是非常成功,成功到可能找不到替代品。
万物皆为 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常用场景经常作为热点新闻,排行榜,人气榜单等使用。
总结
- redis 中常用String基本能满足80%的程序员工作
- 不要满足于String的好处,redis中的数据结构有很多妙用的地方
- list的使用场景非常广泛,并且开放很高