Redis数据存储和读写

今天工作群里,有小伙伴问了一个问题,从Redis获取的数据,一会是0,一会是OK。

这引起了我们对Redis数据存储和读写的疑问。

以下是整理的一些技术研究内容。

在 Redis 中,所有的数据存储都是基于字符串的。无论你插入的是 String、int 还是 DateTime 类型的数据,最终都会以字符串的形式存储在 Redis 中。具体来说:

  1. String 类型数据:

    • 存储:直接以字符串形式存储,无需额外处理。
    • 取出:直接取出字符串即可。
  2. int 类型数据:

    • 存储:将 int 类型转换为字符串,然后存储。
    • 取出:从 Redis 中取出字符串后,再转换为 int 类型。
  3. DateTime 类型数据:

    • 存储:通常将 DateTime 类型转换为某种标准格式的字符串(如 ISO 8601 格式),然后存储。
    • 取出:从 Redis 中取出字符串后,再解析为 DateTime 类型。

具体的操作示例如下:

插入数据

import redis
from datetime import datetime

# 连接到 Redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)

# 存储 String 数据
r.set('my_string', 'Hello, Redis!')

# 存储 int 数据
r.set('my_int', str(12345))

# 存储 DateTime 数据
now = datetime.now().isoformat()
r.set('my_datetime', now)

取出数据

# 取出 String 数据
my_string = r.get('my_string').decode('utf-8')

# 取出 int 数据
my_int = int(r.get('my_int'))

# 取出 DateTime 数据
my_datetime = datetime.fromisoformat(r.get('my_datetime').decode('utf-8'))

数据类型转换:当你从 Redis 取出数据时,Redis 返回的是字节字符串,你需要根据存储的数据类型进行相应的转换:

  • **String 数据:**直接解码为字符串。
  • **int 数据:**先解码为字符串,然后转换为整数。
  • **DateTime 数据:**先解码为字符串,然后解析为 DateTime 对象。

这种方式虽然简单直接,但需要在应用层处理数据的序列化和反序列化。

我们可以根据需要选择不同的序列化格式(如 JSON、Protobuf 等)来存储更复杂的数据结构。

这种设计会出现数据序列化和反序列化的性能问题吗?
Redis内部数据的存储原理是什么?
 
以上。
 
周国庆
2024/6/2

 

posted @ 2024-06-02 09:38  Eric zhou  阅读(417)  评论(0编辑  收藏  举报