redis入门与五大数据结构使用场景描述

redis是什么

我们来看看官方的说法,redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件

  • redis是工作在内存中的。相比与mysql这种将数据存储在硬盘中的数据库,redis天生就比它快
  • 为什么叫数据结构存储系统?意思是说redis支持多种数据结构的存储方式,比如string、hash、list、set、sorted set、bitmap、hyperloglog、geospatial。我们可以根据实际需求选择不同的数据结构,下面我们通过简单举例阐述不同数据结构的使用场景

redis五大数据结构

redis的key值可以是简单的字符串,也可以是二进制序列。但是不建议key过长,这会影响redis查找key值的性能

下面只举例常用的redis命令,更全面的redis命令大全请到redis官网查看

string

最简单的key-value存储结构

> set age 18
OK
> get age 
"18"

redis的原子递增操作,incr和incrby本质上是同一个命令

> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152

批量设值

> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"

nxxx的区别,nx表示当key不存在时,才能赋值成功,xx表示当key已经存在时,才能赋值成功

> get age
"11112"
> set age 18 nx
(nil)
> set age 10 xx
OK

setmset的区别

  • set命令在一次连接中只能设置一个key-value,如果要设置多个,必须和redis连接多次
  • mset允许客户端和redis的一次连接中同时设置多个值
  • 如果要做批量操作,mset效率比set高

应用场景
在一个投票系统中,某个参赛者又获得了十票

> incrby user:001:ticket 10

list列表

list是一个双向链表的结构,lpushlpop分别表示左插入和左弹出value值,rpushrpop分别表示右插入和右弹出value值

list是有序的,value值可以重复,可以通过下标获取指定元素

应用场景
某个平台需要记录一个用户发表的文章,可以把文章的唯一ID和该用户绑定,如某用户ID为1,发布了arcticle1、arcticle2、arcticle1三篇文章,那么可以这样记录:

> lpush user:1:arcticle arctitle:1 arctitle:2 arctitle:3

至于某篇文章的具体内容可以用下述的hash来记录

hash哈希

hash很适合存储对象,比如有一张表

idnameagesex
1lucy18girl
2tom20boy

我们需要用hash记录lucy,我们可以这样

> hmset user:1 name lucy age 18 sex girl

当我们需要对lucy的年龄+2的时候,我们可以直接对其中的某个属性操作

> hincrby user:11 age 2

需要注意,当filed个数少,且value不大时,内部使用压缩列表ziplist编码。当value大于64字节时,内部编码为hashtable。

set集合

不允许保存重复元素、集合内元素无序、支持增删改查、集合间可以做差集、并集、交集,最多可以保存232-1个元素

集合适合用来给人、事物贴标签。比如我要表示桌子是黑色的、方形的,凳子是黑色的,圆柱形的,最后找出这两者一样的地方(都是黑色的)

> sadd desk black square
(integer) 2
> sadd chair cylindrical black
(integer) 2
> sinter desk chair
1) "black"

sorted set有序集合

有序集合顾名思义就是集合内的元素有序。集合内每个元素都有分值(score)的概念,排序也就是根据这个分值排的

有序集合适合做需要得到排名的场景需求,比如某场线上文章比赛,举办方通过谁的文章点赞更多,谁就能获得更高的排名

zadd user:arcticle 50 tom 10 jack 99 lucy 
(integer) 3
> zrevrange user:arcticle 0 -1 withscores
1) "lucy"
2) "99"
3) "tom"
4) "50"
5) "jack"
6) "10"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值