【入门篇】1.1 redis 基础数据类型详解和示例

文章目录

  • [1. 简介](#1. 简介)
  • [2. Redis基础数据类型](#2. Redis基础数据类型)
  • [3. 使用Redis存储数据的注意事项](#3. 使用Redis存储数据的注意事项)
    • [1. 内存管理](#1. 内存管理)
    • [2. 数据持久化](#2. 数据持久化)
    • [3. 高并发下的性能考量](#3. 高并发下的性能考量)
  • [4. 参考资料](#4. 参考资料)

1. 简介

Redis概述

Redis 是一个开源的在内存中存储数据的结构化键值数据库,它支持多种类型的数据结构,如字符串、列表、集合、哈希、有序集合等。此外,Redis还支持事务、持久化、LUA脚本、LRU清除、自动故障转移等功能。

Redis特点

  • 性能高效:Redis能读的速度是110000次/s,写的速度是81000次/s,因此被广泛应用于缓存场景。

  • 支持多种数据类型:Redis支持最常见的数据类型,为复杂的应用提供了广泛的可能性。

  • 数据持久化:Redis可以将数据保存在磁盘上,重启后可以再次加载进行使用。

  • 支持消息队列:Redis还可以用作消息队列使用,它提供了发布/订阅等相关功能。

  • 支持事务:Redis支持事务,可以一次执行多个命令,中间不会被其他命令插入。

  • 高可用和分布式:通过Redis的Sentinel系统和Cluster集群模式,可以构建高可用、分布式的Redis系统。

Redis安装和启动

Redis的安装过程根据操作系统的不同而不同。以Linux为例,可以通过如下命令进行安装:

bash 复制代码
$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz
$ tar xzf redis-5.0.3.tar.gz
$ cd redis-5.0.3
$ make

安装完成后,可以通过以下命令启动Redis:

bash 复制代码
$ src/redis-server

这样就成功启动了Redis服务器。要连接到这个服务器,可以打开另一个终端窗口,然后输入:

bash 复制代码
$ src/redis-cli

这样就可以开始使用Redis了。

2. Redis基础数据类型

2.1 String类型

String类型是Redis最基础的数据类型,是二进制安全的。它可以包含任何数据,例如jpeg图片或者序列化的对象,或者就简单的文本数据。String类型的value最大能存储512MB的数据。

场景示例

在一个电商平台中,用户的购物车信息可以使用String类型存储,例如存储用户ID和购物车商品数量的键值对。

shell 复制代码
SET user:1:cart 5
GET user:1:cart

常用命令示例

1. SET:

SET命令用于设置指定键的值,如果键已经存在则覆盖旧的值。

bash 复制代码
SET name "John Doe"

执行结果:OK。命令执行成功,则返回OK

2. GET:

GET命令用于获取指定键的值。

bash 复制代码
GET name

执行结果:"John Doe"。如果键存在则返回其对应的值,否则返回nil

3. INCR:

INCR命令用于将指定键的值增加1。如果键不存在,那么在操作前会先将其设置为0,然后再执行加1操作。

bash 复制代码
SET counter 100
INCR counter

执行结果:101INCR命令返回执行操作后的值。

4. DECR:

DECR命令用于将指定键的值减少1。同样,如果键不存在,那么在操作前会先将其设置为0,然后再执行减1操作。

bash 复制代码
DECR counter

执行结果:100DECR命令返回执行操作后的值。

2.2 List类型

List类型是Redis的一种复杂的数据类型,也是Redis的重要特性之一。Redis的List类型实际上是一个双向链表,所以添加一个新的元素到List的头部或者尾部的复杂度是O(1)。同时由于采用链表实现,你可以利用索引下标来获取元素,或者进行范围查询,这个操作的复杂度是O(N)。

场景示例

在一个即时通讯应用中,可以使用List类型存储聊天记录,每次发送的消息都会添加到List中。

命令示例:

bash 复制代码
LPUSH chat:room1 "Hello"
LPUSH chat:room1 "How are you?"
LRANGE chat:room1 0 -1

常用命令示例及执行结果

1. LPUSH:

LPUSH命令用于将一个或多个值插入到列表头部:

bash 复制代码
LPUSH mylist "World"
LPUSH mylist "Hello"

执行结果:2LPUSH命令返回此时列表的长度。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "Hello" 2) "World"

2. RPUSH:

RPUSH命令用于将一个或多个值插入到列表的尾部:

bash 复制代码
RPUSH mylist "Redis"

执行结果:3RPUSH命令返回此时列表的长度。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "Hello" 2) "World" 3) "Redis"

3. LPOP:

LPOP命令用于移除并返回列表的第一个元素:

bash 复制代码
LPOP mylist

执行结果:"Hello"LPOP命令返回被移除的元素的值。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "World" 2) "Redis"

4. RPOP:

RPOP命令用于移除并返回列表的最后一个元素:

bash 复制代码
RPOP mylist

执行结果:"Redis"RPOP命令返回被移除的元素的值。

执行LRANGE mylist 0 -1命令查看列表,结果为:1) "World"

以上即为Redis List类型的常用命令示例,以及它们的执行结果。对于更多的命令,你可以查阅Redis的官方文档进行学习。

2.3 Set类型

Set类型也是Redis的一种复杂数据类型,它是一种无序的、元素不重复的集合。由于集合中的元素是唯一的,所以可以使用Set类型来存储一些集合元素,并进行交集、并集、差集等操作。

场景示例

某个社交网络应用中,可以使用Set类型存储用户的好友列表,以便进行好友关系的管理。

命令示例:

bash 复制代码
SADD user:1:friends user:2
SADD user:1:friends user:3
SMEMBERS user:1:friends

常用命令示例

1. SADD:

SADD命令用于向集合添加一个或多个成员。

bash 复制代码
SADD myset "Hello"
SADD myset "World"

执行结果:1SADD命令返回添加成功的元素数量。

执行SMEMBERS myset命令查看集合,结果为:1) "Hello" 2) "World"

2. SREM:

SREM命令用于移除集合中一个或多个成员。

bash 复制代码
SREM myset "World"

执行结果:1SREM命令返回移除成功的元素数量。

执行SMEMBERS myset命令查看集合,结果为:1) "Hello"

3. SISMEMBER:

SISMEMBER命令用于判断成员元素是否是集合的成员。

bash 复制代码
SISMEMBER myset "World"
SISMEMBER myset "Hello"

执行结果:01SISMEMBER命令返回元素是否在集合中,0表示不在,1表示在。

2.4 Hash类型

Hash类型是Redis的一种复杂数据类型,它相当于一种简单的二级字典:第一级的key对应一个新的字典,这个新的字典就是Hash的内部结构,拥有自己的key-value对。Hash类型适合用于存储对象。

场景示例

某个网站需要存储用户的个人信息,可以使用Hash类型存储用户的姓名、年龄、性别等字段。

命令示例:

bash 复制代码
HSET user:1 name "John"
HSET user:1 age 25
HSET user:1 gender "Male"
HGETALL user:1

常用命令示例

1. HSET:

HSET命令用于为哈希表中的字段赋值。

bash 复制代码
HSET myhash field1 "Hello"
HSET myhash field2 "World"

执行结果:1HSET命令返回操作成功的数量。

执行HGETALL myhash命令查看哈希表,结果为:1) "field1" 2) "Hello" 3) "field2" 4) "World"

2. HGET:

HGET命令用于获取存储在哈希表中指定字段的值。

bash 复制代码
HGET myhash field1

执行结果:"Hello"HGET命令返回字段的值。

3. HGETALL:

HGETALL命令用于获取在哈希表中指定key的所有字段和值。

bash 复制代码
HGETALL myhash

执行结果:1) "field1" 2) "Hello" 3) "field2" 4) "World"HGETALL命令返回哈希表的所有字段和值。

2.5 Sorted Set类型

Sorted Set是Redis的一种复杂数据类型,也是集合的一种,能够存储一组数据,并且每个数据都有一个得分。数据是唯一的,但是得分(score)可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。而得分的值是通过跳跃表来进行排序的。

场景示例:一个新闻网站可以使用Sorted Set类型存储热门新闻的排名,以便展示热门文章。

命令示例:

shell 复制代码
ZADD news:popular 1000 "Article1"
ZADD news:popular 800 "Article2"
ZADD news:popular 600 "Article3"
ZREVRANGE news:popular 0 -1 WITHSCORES

常用命令示例

1. ZADD:

ZADD命令用于向有序集合添加一个或多个成员,或者更新已存在成员的分数。

bash 复制代码
ZADD myzset 1 "one"
ZADD myzset 2 "two" 3 "three"

执行结果:1ZADD命令返回被成功添加的新成员的数量。

执行ZRANGE myzset 0 -1 WITHSCORES命令查看有序集合,结果为:1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3"

2. ZSCORE:

ZSCORE命令返回有序集中,成员的分数值。

bash 复制代码
ZSCORE myzset "one"

执行结果:"1"ZSCORE命令返回成员的分数值。

3. ZRANGE:

ZRANGE命令用于返回有序集中,指定区间内的成员。

bash 复制代码
ZRANGE myzset 0 -1

执行结果:1) "one" 2) "two" 3) "three"ZRANGE命令返回指定区间内的成员。

3. 使用Redis存储数据的注意事项

1. 内存管理

  • Redis是基于内存的数据库,数据存储在内存中,因此需要注意合理使用内存。可以使用maxmemory参数限制Redis使用的最大内存大小,并使用相应的策略(如LRU)来处理内存不足的情况。
  • 对于大量数据存储的情况,可以考虑使用分片(sharding)或者集群(cluster)来扩展Redis的内存容量。

2. 数据持久化

  • Redis提供了两种持久化机制:RDB(Redis Database)和AOF(Append-Only File)。
  • RDB是将Redis在某个时间点的数据以快照的形式保存到硬盘上,适合用于备份和恢复数据。
  • AOF是将Redis的操作日志以追加的方式保存到硬盘上,适合用于持久化数据,但会增加IO的开销。
  • 可以根据实际需求选择合适的持久化机制,并配置相应的策略(如定时保存或根据操作数保存)来保证数据的安全性。

3. 高并发下的性能考量

  • Redis是单线程的,虽然性能非常高,但在高并发的情况下需要注意一些性能优化的问题。
  • 使用pipeline可以将多个命令打包发送,减少网络开销。
  • 使用批量操作命令(如MSET、MGET等)可以减少单个命令的调用次数,提高效率。
  • 合理使用连接池,避免频繁地建立和关闭连接。
  • 对于复杂的操作,可以考虑使用Lua脚本来减少网络通信开销。
  • 避免使用过多的阻塞操作,如BRPOP、BLPOP等,以免影响其他客户端的响应时间。

4. 参考资料

https://github.com/redis/redis

相关推荐
乌鸦乌鸦你的小虎牙20 分钟前
qt 5.12.8 配置报错(交叉编译环境)
开发语言·数据库·qt
ezreal_pan1 小时前
弹窗缓存重构技术方案
缓存·重构·golang
一只大袋鼠1 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
Anastasiozzzz1 小时前
深入研究Redis的ZSet底层数据结构:从 Ziplist 的级联更新到 Listpack 的完美救场
数据结构·数据库·redis
菠萝蚊鸭1 小时前
x86 平台使用 buildx 基于源码构建 MySQL Wsrep 5.7.44 镜像
数据库·mysql·galera·wsrep
沙漏无语3 小时前
(二)TIDB搭建正式集群
linux·数据库·tidb
姚不倒3 小时前
三节点 TiDB 集群部署与负载均衡搭建实战
运维·数据库·分布式·负载均衡·tidb
隔壁小邓4 小时前
批量更新方式与对比
数据库
数据知道4 小时前
MongoDB复制集架构原理:Primary、Secondary 与 Arbiter 的角色分工
数据库·mongodb·架构
人道领域4 小时前
苍穹外卖:菜品新增功能全流程解析
数据库·后端·状态模式