当前位置:网站首页>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一样,内存连续,就像数组一样。
边栏推荐
- [algorithm] sword finger offer2 golang interview question 2: binary addition
- It has been solved by personal practice: MySQL row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT
- 异常:IOException:Stream Closed
- RTKLIB: demo5 b34f. 1 vs b33
- [algorithm] sword finger offer2 golang interview question 7: 3 numbers with 0 in the array
- [算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组
- 地球围绕太阳转
- [algorithm] sword finger offer2 golang interview question 6: sum of two numbers in the sorting array
- Wechat applet development experience
- [dry goods] cycle slip detection of suggestions to improve the fixed rate of RTK ambiguity
猜你喜欢
![Heap sort [handwritten small root heap]](/img/f0/6efda3c6f499a32671a935dd2f21db.png)
Heap sort [handwritten small root heap]

Liste des boucles de l'interface graphique de défaillance

如何保障 MySQL 和 Redis 的数据一致性?

Fairygui joystick
![[algorithm] sword finger offer2 golang interview question 4: numbers that appear only once](/img/f7/23ffc81ec8e9161c15d863c1a67916.png)
[algorithm] sword finger offer2 golang interview question 4: numbers that appear only once

What are the advantages of using SQL in Excel VBA

Mysql database reports an error: row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT=DY

音乐播放(Toggle && PlayerPrefs)

Record: the solution of MySQL denial of access when CMD starts for the first time

121 distributed interview questions and answers
随机推荐
Usage differences between isempty and isblank
[dry goods] cycle slip detection of suggestions to improve the fixed rate of RTK ambiguity
架构师怎样绘制系统架构蓝图?
121道分布式面试题和答案
What are the functions and features of helm or terrain
Knowledge system of digital IT practitioners | software development methods -- agile
Sharing ideas of on-chip transplantation based on rtklib source code
Wechat applet development experience
Mysql database index
RTKLIB: demo5 b34f. 1 vs b33
Affichage du changement de valeur du Buff de gain de l'interface graphique de défaillance
[算法] 剑指offer2 golang 面试题4:只出现一次的数字
Answer to "software testing" exercise: Chapter 1
FGUI工程打包发布&导入Unity&将UI显示出来的方式
GPS高程拟合抗差中误差的求取代码实现
【rtklib】在rtk下使用抗差自适应卡尔曼滤波初步实践
Music playback (toggle & playerprefs)
Record: I accidentally wrote a recursion next time
服务未正常关闭导致端口被占用
All in one 1405: sum and product of prime numbers
