当前位置:网站首页>Redis介绍与使用
Redis介绍与使用
2022-07-06 09:19:00 【几何学家】
redis概述
redis是一种非关系型数据库,部署在内从中的键值数据库,其value可以有五种类型,分别为string,set,hash,list,zset
STRING:可以存储字符串,整数或者浮点数,可以对于整个字符串或者字符串中的字串进行操作,当其为整数或者浮点数时,可以进行自增或者自减操作
LIST:主要存储列表。两端压入或弹出,可以对于多个元素进行修剪,只保留一个范围内的元素
SET :可以添加获取移除单个元素,计算交,并,差集,从集合中随机获取元素
HASH:可以添加获取移除单个元素,检查元素是否存在,获取所有键值对
ZSET:添加获取删除元素,根据分值范围或成员来获取元素,计算一个键的排名
数据结构底层实现
string:
struct sdshdr{
int len;//已经占用空间长度
int free;//剩余空间长度
char buf[];//数据空间
}
相比于直接调用c字符串的优势是可以直接保存长度无需遍历。除此之外还可以减少缓冲区溢出的问题,因为使用前会先检查剩余长度是否足够。
list:
双向链表,不过多介绍
typedef struct listNode{
struct listNode *prev;
struct listNode * next;
void * value;
}
hash:
typedef struct dictht {
//哈希表数组
dictEntry **table;
//哈希表大小
unsigned long size;
//哈希表大小掩码,用于计算索引值
unsigned long sizemask;
//该哈希表已有节点的数量
unsigned long used;
}
typeof struct dictEntry{
//键
void *key;
//值
//不同的键值对应的值可能不同类型,
//因此使用union来解决这个问题
union{
void *val;
uint64_tu64;
int64_ts64;
}
struct dictEntry *next;
}
当hash冲突时,采用拉链法解决冲突
zset:
底层采用跳表实现,可以用来代替二叉平衡树
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速查找访问节点的目的。跳跃表是一种随机化的数据,跳跃表以有序的方式在层次化的链表中保存元素,效率和平衡树媲美 ——查找、删除、添加等操作都可以在O(logn)期望时间下完成。
//节点的具体实现
typedef struct zskiplistNode{
//层
struct zskiplistLevel{
//前进指针
struct zskiplistNode *forward;
//跨度
unsigned int span;
} level[];
//后退指针
struct zskiplistNode *backward;
//分值
double score;
//成员对象
robj *obj;
}
typedef struct zskiplist {
//表头节点和表尾节点
structz skiplistNode *header,*tail;
//表中节点数量
unsigned long length;
//表中层数最大的节点的层数
int level;
}zskiplist;
还不了解的小伙伴可以看下面这篇帖子
Skip List–跳表(全网最详细的跳表文章没有之一)
set:
typedef struct intset{
//编码方式int16_t、int32_t、int64_t
uint32_t enconding;
// 集合包含的元素数量
uint32_t length;
//保存元素的数组
int8_t contents[];
}
intset是Redis内存数据结构之一,和之前的 sds、 skiplist、dict、adlist
等通用数据相比,它是Redis特有的,用来实现Redis的Set结构(当元素较小且为数字类型时),它的特点有:元素类型只能为数字。 元素有三种类型:int16_t、int32_t、int64_t。 元素有序,不可重复。
intset和sds一样,内存连续,就像数组一样。
边栏推荐
- Halcon knowledge: gray_ Tophat transform and bottom cap transform
- 【RTKLIB 2.4.3 b34 】版本更新简介一
- Wechat applet development experience
- FairyGUI增益BUFF数值改变的显示
- 2年经验总结,告诉你如何做好项目管理
- Liste des boucles de l'interface graphique de défaillance
- (core focus of software engineering review) Chapter V detailed design exercises
- Introduction to the daily practice column of the Blue Bridge Cup
- Fairygui character status Popup
- 《软件测试》习题答案:第一章
猜你喜欢
Matlab读取GNSS 观测值o文件代码示例
Fabrication d'un sac à dos simple fairygui
[algorithm] sword finger offer2 golang interview question 13: sum of numbers of two-dimensional submatrix
Implementation of Excel import and export functions
[算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组
[algorithm] sword finger offer2 golang interview question 3: the number of 1 in the binary form of the first n numbers
[algorithm] sword finger offer2 golang interview question 1: integer division
地球围绕太阳转
FairyGUI簡單背包的制作
341. Flatten nested list iterator
随机推荐
Introduction to the daily practice column of the Blue Bridge Cup
Shortest Hamilton path (pressure DP)
[algorithm] sword finger offer2 golang interview question 2: binary addition
[algorithm] sword finger offer2 golang interview question 5: maximum product of word length
Knowledge system of digital IT practitioners | software development methods -- agile
MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列
Fabrication of fairygui simple Backpack
[dry goods] cycle slip detection of suggestions to improve the fixed rate of RTK ambiguity
The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25
十分钟彻底掌握缓存击穿、缓存穿透、缓存雪崩
[算法] 剑指offer2 golang 面试题7:数组中和为0的3个数字
一文搞定 UDP 和 TCP 高频面试题!
[算法] 剑指offer2 golang 面试题10:和为k的子数组
Itext 7 生成PDF总结
Special palindromes of daily practice of Blue Bridge Cup
WSL common commands
Lean product development - Lean Software Development & lean product development
Ten minutes to thoroughly master cache breakdown, cache penetration, cache avalanche
堆排序【手写小根堆】
Record: Navicat premium can't connect to MySQL for the first time