当前位置: 首页 > news >正文

【Redis存储】Redis介绍

Redis说明

        Redis是一款开源、高性能、支持多种数据结构的内存数据库。Redis与MySQL数据库不同的是。MySQL是在磁盘中以文件形式存储数据的,该数据库主要是通过“表”的方式来存储组织数据的;Redis是直接在内存中存储数据的,该数据库主要是通过“键值对”的方式来存储组织数据的。正是因为Redis将数据存储在内存中,系统读写时无需磁盘IO进行调用,而是直接拿取数据,因此,Reedis性能更高。

        Redis高性能特性除了将数据存储到内存上外,还有就是采用单线程模型(更高版本的Redis引入了多线程。多线程提高效率的前提是,CPU运行密集型任务,使用多线程可以充分利用CPU多核资源)和底层使用高效率的数据结构。单线程通过 IO 多路复用处理并发连接,减少了不必要线程之间的竞争开销。

        虽然Redis性能更高,但是内存大小有限,这也就导致存储的空间有限。通常,对于单机系统,很多数据都是直接在内存中存储的,如定义变量等。Redis的用途是在分布式系统中。进程之间都是隔离的,在分布式系统上,Redis基于网络,把自己内存中的变量给别的进程,从而实现进程间的通信。这里想说的是,在单机系统中,直接通过定义变量存储数据的方式比Redis更加有用,Redis是一个在内存中存储数据的中间件,用作数据缓存,因为Redis要运行网络,比变量直接存储要慢。

        Redis把数据存储到内存上,然而,内存上的数据是“易失”的,一旦进程退出或系统重启,内存数据将会流失。Redis针对这一问题采取的策略是当出现内存数据流失的情况时,Redis会把数据存储在硬盘上,若Redis重启了,就会将加载到硬盘中的数据重新恢复到内存里。

        Redis经常用作与缓存,在MySQL前面。当查找redis操作超时时,就会直接查找数据库。

Redis安装

        Ubuntu系统上安装Redis指令:apt install -y redis

        安装完redis后,通常还需要在 /etc/redis/redis.conf (redis的配置文件)配置文件中更改下绑定IP和protected-mode(保护模式)。更改成如下图。

       默认情况下,bind绑定的地址是127.0.0.1,仅限制本地主机访问,protected-mode字段是yes,即开启保护模式,仅允许本地回环地址(127.0.0.1)连接,拒绝所有外部网络地址(如其他服务器、公网 IP)的连接请求。

        更改完配置后,还需要重启服务器使其生效,即:service redis-server restart

Redis使用

        下载安装好redis后,需要使用redis自带的客户端,连接指定主机上的redis服务器。

root@VM-20-13-ubuntu:~# redis-cli -h 127.0.0.1 -p 6379   
127.0.0.1:6379> quit

root@VM-20-13-ubuntu:~# 

// 直接输入redis-cli默认连接本地服务器

        Redis是使用键值对存储数据的,即key和value。key是string类型,value可以是任意类型。Redis内部是使用一个全局的哈希表保存所有键值对数据,哈希表本质是一个数组,其每一个元素表示一个哈希桶。

        下面来介绍几个Redis中几个基本的全局命令:

        1,set [key] [value]。这里的key和value都是字符串类型。

root@VM-20-13-ubuntu:~# redis-cli
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK

        2,get [key]。得到key对应的value,若key不存在,则返回nil(和NULL/nullptr是一个意思)

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
(nil)

        3,keys [key匹配模式]。keys用来查询当前服务器上匹配的key。key匹配模式有以下几种:

  • ?:匹配随机一个字符。如:key? 能够匹配key1,kye2。
  • *:匹配任意多个字符。如:key* 能够匹配key123,key456。
  • [.....]:匹配 “[]” 里面任意一个字符。如 key[12]能匹配key1,key2,但不能匹配key3。
  • [^e]:除了e匹配不了,其余都能匹配。如k[^e]y匹配kay,kby,但不能匹配key。
  • [a-b]:匹配a-b这个范围内的字符,包含两个边界。如key[a-b],只能匹配keya,keyb。

127.0.0.1:6379> keys key?
1) "key1"
2) "key2"
127.0.0.1:6379> keys ke*
1) "key1"
2) "key2"
127.0.0.1:6379> keys k[^e]y
(empty array)
127.0.0.1:6379> keys key[1-3]
1) "key1"
2) "key2"
127.0.0.1:6379> keys key[1abc]
1) "key1"

        keys命令的时间复杂度是O(1),但更准确来说是O(n),这里的n代表查询到key的数量。因此,在实际中,一定要小心使用keys,尤其是 keys *。因为redis是一个单线程的服务器,实际运用中的keys查询的key可能非常多,耗时长,使用keys查询就会使 redis服务器被阻塞,导致无法给其它客户端提供服务。

        4,exists [key]。判断key是否存在。与keys一样,时间复杂度为O(n),n为key数量。

127.0.0.1:6379> exists hellp key1
(integer) 1
127.0.0.1:6379> exists key2 key1
(integer) 2
127.0.0.1:6379> exists key3 key4
(integer) 0

        5,del [key1] [key2] .....。删除指定的key。时间复杂度为O(n),n为key数量。

127.0.0.1:6379> del key1 key2 key3
(integer) 2

        6,expire [key] [秒数]。给已存在的key设置生存时间,到达指定时间后自动删除。时间复杂度是O(1)。

127.0.0.1:6379> expire key1 5
(integer) 1

        下面问题来了,redis服务器如何知道哪些key已经过期要被删除了呢?redis整体的策略是定期删除和惰性删除。定期删除是每次抽取一部分,进行验证过期时间。惰性删除是当key已经到过期时间了,但它还存在,当再次访问到它时服务器会触发删除key的操作,同时返回nil。

        7,ttl [key]。获取key生存的时间,单位是秒。返回-1表示没有过期时间,-2表示不存在。时间复杂度是O(1)。

127.0.0.1:6379> ttl key1
(integer) -2

        8,type [key]。查询key对应value的类型。

127.0.0.1:6379> type key1
string
127.0.0.1:6379> type key2
string
127.0.0.1:6379> type key3
string

        上面的指令也可以用大写。redis中的命令不区分大小写。


        最后,要说明的是,上面都是在redis客户端,中间是通过网络与redis服务端通信。因此,效率上是比不过单机系统直接定义变量存储。

http://www.dtcms.com/a/605392.html

相关文章:

  • 计算机组成原理---总线与输入/输出系统
  • Python 的几个重要的相关概念
  • 零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
  • Spring AI Alibaba 自学习AI智能体实战:让AI越用越懂你
  • Springboot主配置文件
  • 家具电商网站建设一定要建设好网站才能备案吗
  • 医药建设网站wordpress 柚子皮下载
  • Java被裁后如何快速上岸?
  • 拥抱元宇宙:通过GoogleVR来了解VR到底是什么
  • 【UE5】- VR小技巧 :用PC处理代替频繁使用VR头显开发
  • 攻击者利用自定义GPT的SSRF漏洞窃取ChatGPT机密数据
  • 支付招聘网站套餐费用怎么做帐wordpress preg_replace 关键词 alt
  • GPT-5.1发布:深入解读与 GPT-5、GPT-4o 在性能与安全基准上的全面对比
  • 两台虚拟机搭建多机区块链网络
  • Vue.js栏目 - 目录一展
  • 网站采集怎么做莱芜金点子广告电子版2022最新
  • 2025 最硬核技术创新,重构 AI 感知与决策逻辑
  • flowable05外置表单和绘制流程图
  • UDP网络编程:从客户端封装到服务端绑定的深度实践
  • Arbess从初级到进阶(4) - 使用Arbess+GitLab实现React.js 项目自动化部署
  • 内网穿透技术
  • asp.net做织梦网站长沙商城网站开发
  • [免费]基于Python的深度学习豆瓣电影数据可视化+情感分析推荐系统(Flask+Vue+LSTM+scrapy)【论文+源码+SQL脚本】
  • SQL 分类
  • 微信小程序项目上传到git仓库(完整操作)
  • Vue 3响应式系统的底层机制:Proxy如何实现依赖追踪与自动更新?
  • 【MySQL】MySQL库的操作
  • 研发管理知识库(10)AWS云的核心DevOps工具介绍
  • PostgreSQL 备份导致的 Cache Pollution(缓存污染)
  • 拒绝繁杂,一款轻量,极致简洁的开源DevOps平台 - TikLab