缓存 - Redis - 数据结构

redis中数据结构

redis中的value有五种不同的数据结构


string字符串

最简单的Redis类型,通过set key value 或者 get key 来操作此类数据,值可以是任务种类的字符串(包括二进制数据),可以保持一个图片的二进制流,但是最大长度不能超过512MB


list

Redis lists是基于Linked Lists实现,链表上每个节点都包含了一个字符串,使用lpush在十个元素的list头部和百万个元素的list头部添加新元素速度是相同的,但是查询效率就相当差了。

lpush在list的左边(头部)添加一个新元素,rpush在list的右边(尾部)添加一个新元素;

lpop弹出list的左边第一个元素,rpop在list右边弹出一个元素;

lrange范围打印list中的值。(实际应用中可以获得最近关注的人)

可以使用list来实现生产者和消费者模型,如果使用lpush和rpop来实现该功能,若list是空,这时候消费者就需要轮询来获取数据,这样就会增加redis访问压力、增加消费端的cpu时间,而很多访问都是无用的。为此redis提供了阻塞式访问blpop和brpop, 消费者可以在获取数据时指定如果数据不存在阻塞的时间,如果在时限内获得数据则立即返回,如果超时还没有数据则返回null。timeout参数为0表示一直阻塞。


set

Redis Set 是String的无序排列

> sadd myset 1 2 3
(integer) 3
> smembers myset
1. 3
2. 1
3. 2

scard key 返回 key的基数,就是key对应的value有多少元素

sinner key1 key2 求集合key1和key2的交集(例如微博的共同好友)

sunion求并集,sdiff求差集(不同元素)

smember 返回key集合中所有元素

sismember 是否存在key的元素(1存在,0不存在)


sorted set

Redis有序集合和集合一样,是string类型元素集合,且不允许重复,不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中成员进行从小到大的排序,成员唯一但分数可以重复。

zadd key score1 member1 [score2 member2] 

向有序集合添加一个或多个成员,或者更新已存在成员的分数

zcardkey 

获取有序集合的成员数

zrange key 0 2 按从小到大的顺序取前三(排行榜的排名)

zrevrange key 0 2 按从大到小的顺序取


hash

Redis中的hash类型的value可以看成map容器,可以用来保存用户的信息,key为user1,value中包含了username、password、age等键值对。每个hash可以储存 232 - 1 个键值对。

同样是缓存,在Memcached中,我们经常将一些结构化的信息打包成HashMap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。

hset key field 获取存储在哈希表中指定字段的值

hgetall key 获取在哈希表中指定 key 的所有字段和值

hexists key field 查看哈希表 key 中,指定的字段是否存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值