【入门篇】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

相关推荐
Amagi.几秒前
Redis的内存淘汰策略
数据库·redis·mybatis
hai4117419626 分钟前
mysql 与postgresql 的区别(gpt4)
数据库·mysql·postgresql
知识分享小能手16 分钟前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
白总Server31 分钟前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
冰镇毛衣37 分钟前
2.4 数据库表字段约束
数据库·sql·mysql
&木头人&43 分钟前
oracle select字段有子查询会每次执行子查询吗
数据库·oracle
冰镇毛衣43 分钟前
数据库简介
开发语言·数据库·sql·oracle
(⊙o⊙)~哦44 分钟前
oracle查询历史操作记录
数据库·oracle
无休居士1 小时前
【实践】应用访问Redis突然超时怎么处理?
数据库·redis·缓存
.Net Core 爱好者1 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net