avatar

后端/redis基础

Redis 简介

Redis 是一个基于内存的键(key)值(value)类型的数据结构存储容器,它既可以完全工作在内存中,也可以持久化存储。

当 Redis 工作于持久化模式时,可以将它当作一个非关系型数据库使用。

而工作于内存中时,则可以用作数据的高速缓存。

不过和普通的键值结构缓存不同是:Redis 的值可以拥有种类繁多并且灵活的内建数据结构。这些数据结构具有及其高效的增删改查时间复杂度,在能够满足更多业务场景的数据存储需求同时还提供极为快速的处理速度。

1、什么是 Redis

Redis 是一款内存高速缓存数据库。Redis 全称为:Remote Dictionary Server (远程数据服务),使用 C 语言编写,Redis 是一个 key-value 存储系统(键值存储系统),支持丰富的数据类型,如:String、list、set、zset、hash。

Redis 是一种支持 key-value 等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。使用 C 语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

2、Redis 特点

Redis 以内存作为数据存储介质,读写数据的效率极高。

Redis 跟 memcache 不同的是,储存在 Redis 中的数据是持久化的,断电或重启,数据也不会丢失。

Redis 的存储分为内存存储、磁盘存储和 log 文件。

Redis 可以从磁盘重新将数据加载到内存中,也可以通过配置文件对其进行配置,因此,redis 才能实现持久化。

Redis 支持主从模式,可以配置集群,更利于支撑大型的项目。

3、Redis 应用场景,能做什么

众多语言都支持 Redis,因为 Redis 交换数据快,在服务器中常用来存储一些需要频繁调取的数据,节省内存开销,也极大的提升了速度。

将一些热点数据存储到 Redis 中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

1、会话缓存(最常用)

2、消息队列(支付)

3、活动排行榜或计数

4、发布,订阅消息(消息通知)

5、商品列表,评论列表

4、Redis 数据类型

Redis 一共支持五种数据类型:String(字符串)、hash(哈希)、list(列表)、set(集合)和 zset(sorted set 有序集合)
Redis 值数据结构类型
Redis 内建的值数据结构有如下类型:

字符串(Strings)

字符串是最基本也是最简单的值元素类型,普通的键值存储都可以归为此类。字符串类型的值如果是数字,还可以做一些数值运算,例如 incr 操作和 decr 操作对数值的原子增减。字符串类型还允许存储二进制数据,比如图片。

哈希(Hashes)

存储比较复杂数据结构时使用。Redis 的哈希结构其实就是一个哈希表(hashmap),它允许在一个哈希中存储一个或多个键值映射,同时提供获取,修改,删除哈希表其中一个字段或者全部字段的方法。通常,我们可以将 JSON 结构的数据类型存储于哈希中。

线性列表(Lists)

常用的线性队列,实现方式是一个双向链表,它提供了列表头尾添加/删除,索引访问/添加/删除,获取队列长度等操作。可以用来实现消息队列,任务列表以及排行等功能。访问队列两端的元素是非常快的,但如果您试着访问一个非常大的列表的中间元素仍然是十分慢的,列表操作的时间复杂度为 O(N)。

集合(Sets)

集合对外提供的功能与线性列表类似是一个列表的功能,特殊之处在于集合是可以自动排重的,当您需要存储一个列表数据,又不希望出现重复数据时,集合是一个很好的选择,并且集合提供了判断某个成员是否在一个集合内的重要接口,这个也是列表所不能提供的。同时,Redis 还为集合提供了求交集、并集、差集等操作,非常方便、实用。集合是无序存储的,所有关于集合的增删改查操作都是常量 O(1) 时间复杂度。

有序集合(Sorted Sets)

有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的没有成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的。使用有序集合您可以以非常快的速度(O(log(N)))添加,删除和更新元素。 您也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的, 因此您能够使用有序集合作为一个没有重复成员的智能列表。在有序集合中,您可以很快捷的访问一切您需要的东西:有序的元素,快速的存在性测试,快速访问集合的中间元素。

ZSet(sorted set 有序集合)是 String 类型的有序集合,也不可重复。有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序。

5、redis 的服务相关命令

slect#选择数据库(数据库编号0-15)

退出 # 退出连接

信息 # 获得服务的信息与统计

monitor #  实时监控

config  get  #  获得服务配置

flushdb #  删除当前选择的数据库中的key

flushall # 删除所有数据库中的键

6、Redis 的发布与订阅

Redis 的发布与订阅(发布、订阅)是它的一种消息通信模式,一方发送信息,一方接收信息

7、Redis 的持久化

Redis 持久有两种方式:快照(RDB),仅附加文件(AOF)

快照(RDB):
1、将存储在内存的数据以快照的方式写入二进制文件中,默认 dump.rdb 中

2、保存 900 1 # 900 秒内如果超过 1 个 key 被修改,则启动快照保存

3、保存 300 10 # 300 秒内如果超过 10 个 key 被修改,则启动快照保存

4、保存 60 1000 # 60 秒内如果超过 10000 个重点被修改,则启动快照保存

仅附加文件(AOF):1、使用 AOF 持久时,服务会将每个收到的写命令通过写函数追加到文件中(appendonly.aof)

2、AOF 持久化存储方式参数说明

appendonly  yes    #开启AOF持久化存储方式

appendfsync   always   #收到写命令后就立即写入磁盘,效率最差,效果最好

appendfsync   everysec     #每秒写入磁盘一次   效率与效果居中

appendfsync   no    #完全依赖操作系统,效率最佳,效果没法保证

8、Redis 自带相关测试工具

redis-benchmark   --help

redis-benchmark     -n   10000  -q
文章作者: 小黑
文章链接: http://yoursite.com/2023/01/17/后端/redis基础/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小黑的小站
打赏
  • 微信
    微信
  • 支付寶
    支付寶
2