跟王思聪热狗图一样大热的Redis,还不赶紧来Get一下?
前言
不禁喊出一句ig牛逼!哈哈哈 这个话题是不是有点过时了?但说到Redis,真的是被强行灌输的,到处都会被安利Redis,吓得只会mysql和oracle的我,赶紧去get一波..
数据库种类
关系型数据库
常用的关系型数据库:mysql oracle
特点:
- 使用sql进行操作
- 存储在磁盘
非关系型数据库
常用的非关系型数据库:redis Memcached
特点:
- 不依赖sql语句
- 存储在内存中
Redis安装
安装路径
- 官网:https://redis.io,进入之后,点击“download”进行下载,最新版本:5.0.0,亲测没有问题
- Github:在首页搜索redis,选择第一个进行下载也可以
安装方法
- 首先,将压缩包解压
- 进入目录,看有Makefile,直接make,然后安装:sudo make install
开源库的安装方法几乎都一样,更详细的介绍可以参考我的这篇博客:https://www.cnblogs.com/liudw-0215/p/9917422.html
测试
- 启动server:redis-server
- 启动client:redis-cli
- 在客户端执行:ping 或ping hello,看到服务器有回显,说明Redis安装成功,如下图:
至此,Redis安装成功!
Redis使用
redis都是以键值对key-value存储的,key一定是字符串类型,value可能是字符串、list、set、sortedset和hash类型!
字符串操作
- 插入
set str1 hello
- 查询
get str1
- 批量插入
mset str2 123 str2 456
- 批量查询
mget str1 str2 str3
可以看到key是不允许重复的!
list操作
list可以理解为一串字符串,也可以理解为链表;操作过程中,既可以按照队列操作,也可以按照栈进行操作
- 插入-头插法
lpush ls1 aaa bbb ccc
- 查询
查询要稍微说一下,命令是lrange+key+范围,要说明一下范围该怎么表示呢?从0开始可以,那么结束该怎么表示呢?不知道一共有多少个?redis采用-1表示最后一个,-2表示倒数第二个,查询第一个到最后一个命令:
lrange ls1 0 -1
查询结果如下:
说明:注意到显示顺序了么?“l”代表从左开始插入,也就是头插法;如果理解数据结构的头插法,跟这是一样的,因为redis底层也是用数据结构+算法实现的!
- 插入-尾插法
rpush ls2 1 2 3 4
- 弹出最左边
lpop ls2
- 弹出最右边
rpop ls2
求list长度
llen ls1
set操作
set集合是没有顺序的,元素是唯一的
插入
sadd set 1 2 3
查询
smembers set
求差集(A-B)
sdiff A B
求交集
sinter A B
求并集
sunion A B
运行结果如下:
Redis的数据持久化
redis将数据存储在内存,速度比存在磁盘中快很多,大约在百万量级的差别,但是宕机数据就没了,这是不允许的!Redis提供了两种解决办法。
RDB形式
特点:存数据
AOF形式
特点:存命令
hiredis介绍与安装
介绍
hiredis又是什么鬼东西呢?它是封装好的操作Redis的C语言API,安装之后,C语言就可以调用API,去操作Redis了。
安装
依然很简单,Github首页搜索:hiredis,下载,解压,make,sudo make install,一气呵成!
测试
看到安装目录下,有个examples目录,这个目录就是例子,可以看到这个目录下,有很多例子,可以用example.c,然后编译一下,我的版本会报错,我修改了包含的头文件,然后正常,运行结果如下:
至此,hiredis安装成功!
hiredis API接口的说明
封装好的API接口有很多,但掌握4个就可以完成基本的增删改查了
连接数据库
通过IP、端口进行连接,并返回redisContext,用于下面的使用
发送请求命令
函数原型:
void *redisCommand(redisContext *c, const char *format, ...);
参数:
第一个参数:就是redisConnect的返回值
其余参数就是可变参数了
返回值:
就很有意思了,可以参照下表:
释放资源
void freeReplyObject(void *reply);
void redisFree(redisContext *c);
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端