美文网首页
redis基础

redis基础

作者: 写代码的杰西 | 来源:发表于2020-03-12 22:27 被阅读0次

redis 基础类型

String

String: 可以存储

  • INT
  • Float
  • String

setnx key value

nx意思是not exsits ,如果不存在key才会创建成功

del key

删除key

expire key value

设置key多少时间过期

set key value
incr key
decr key

对于整数值可以增加或者减少

append key value

追加字符串

redis是一个kv的数据库。 dict --哈希表来实现字典
每一个kv都有一个dictEntry来存储他。
底层都是dictEntry来实现的。


image.png

key放在SDS数据解构里
value放在redisObject里。


image.png

这里面的type字段,存储这个数据是什么类型的。比如string还是int。
encoding表示是用什么编码。在redis里有三种编码。 可以使用 object encoding key 来查看。默认是raw
lru是用来做内存回收的
refcount是引用计数
*ptr指针指向真正的数据解构,比如string指向一个sds

String的三种编码
1、int 存储8个字节的长整型
2、embstr embstr格式的sds(simple dynamic string)
3、raw 大于44个字节的字符串

sds是什么东西。是redis自定义的字符串类型。

为什么不用c语言的字符串。因为c语言没得字符串类型。如果用char[]来实现,内存、长度变化会重新分配内存都是问题。会包含\0表示换行,如果存储图片音频之类的二进制保存,二进制就不安全。
sds的优势:查找快,空间预分配,不是用\0表示换行。

embstr redisObject sds 是连续的内存空间
raw分配了两次

embstr是只读的。如果更改了embstr的值,embstr就会变为raw。

string应用场景

1、缓存
2、分布式session
3、set NX ex
4、incr 全局id
5、incr 计数器
6、incr 限流
7、位操作

hash

image.png

基本操作 hset hmset hget hmget

hash存储解构
1、ziplist
2、hashtable

ziplist:
经过压缩的双向链表,牺牲了读写性能来节省空间。
如果value超过64个字节就专程hashtable

redis对dictEntry做了多层的封装。


image.png

列表

列表可以存储有序的字符串。可以充当队列或者栈。


image.png

list存储原理 quicklist
是一个双向循环的列表。
quicklistNode


image.png

set 无序集合

image.png

无序不重复的集合。


如果全都是i整形,就用intset。如果有其他的就用hashtable
应用场景:
1、点赞、签到、打卡(key是用户id,value是给他点赞的用户)
2、取交集差集并集
3、用户互相关注、推荐模型

image.png

zset有序集合

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。


image.png image.png image.png

相关文章

网友评论

      本文标题:redis基础

      本文链接:https://www.haomeiwen.com/subject/lhpwjhtx.html