«

redis数据类型以及适用场景

时间:2024-2-20 10:03     作者:韩俊     分类: Mysql


REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(set) 和 有序集合(zset)等类型。

1. string(字符串)类型

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

对应的操作命令主要有:

SET key value 设置指定 key 的值

GET key 获取指定 key 的值

GETRANGE key start end 返回 key 中字符串值的子字符

GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)

GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)

MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值

SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)

SETNX key value 只有在 key 不存在时设置 key 的值

STRLEN key 返回 key 所储存的字符串值的长度

MSET key value [key value ...] 同时设置一个或多个 key-value 对

MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在

PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位

INCR key 将 key 中储存的数字值增一

DECR key 将 key 中储存的数字值减一

APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾

适用场景

2. hash(哈希)类型

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

对应的操作命令主要有:

HMSET

HMGET

DEL

HDEL key field1 [field2] 删除一个或多个哈希表字段

HEXISTS key field 查看哈希表 key 中,指定的字段是否存在

HGET key field 获取存储在哈希表中指定字段的值

HGETALL key 获取在哈希表中指定 key 的所有字段和值

HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment

HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment

HKEYS key 获取所有哈希表中的字段

HLEN key 获取哈希表中字段的数量

HMGET key field1 [field2] 获取所有给定字段的值

HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中

HSET key field value 将哈希表 key 中的字段 field 的值设为 value

HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值

HVALS key 获取哈希表中所有值

HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对

特性:

适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)。

适用场景:

3. list(列表)类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

对应的操作命令主要有:

lpush

适用场景:

1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列

4. Set(集合)类型

Redis 的 Set 是 string 类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1),元素值不能重复。

集合提供了求交集、并集、差集等操作。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

对应的操作命令主要有:

sadd

smembers

适用场景

1、共同好友 

2、利用唯一性,统计访问网站的所有独立ip 

3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐

5. zset(有序集合)类型

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

对应的操作命令主要有:

zadd

适用场景:

1、排行榜 

2、带权重的消息队列

关于 redis 的 key 的一些常用命令

DEL key 该命令用于在 key 存在时删除 key。

EXISTS key 检查给定 key 是否存在。

EXPIRE key seconds 为给定 key 设置过期时间,以秒计。

EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。

PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。

PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计

KEYS pattern 查找所有符合给定模式( pattern)的 key 。

PERSIST key 移除 key 的过期时间,key 将持久保持。

PTTL key 以毫秒为单位返回 key 的剩余的过期时间。

TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

RENAME key newkey 修改 key 的名称。

RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。

TYPE key 返回 key 所储存的值的类型。

标签: mysql

热门推荐