介绍下Redis?Redis有哪些数据类型?

发布时间:2024年01月16日

一、Redis介绍

Redis全称(Remote Dictionary Server本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。Redis默认16个数据库,类似数组下标从0开始,初始默认使用0号库。Redis底层是Redis是单线程+多路IO复用技术

二、Redis的数据类型

1.string类型

1)String是Redis最基本的类型,一个key对应一个value。

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

3)String类型value最多可以是512M。

例子

mset ?<key1> ?<value1> ?<key2> ?<value2> ?.....?
同时设置一个或多个 key-value对 ?

2.list类型

1)Redis的List是单键多值的。

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

3)Redis的List它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

例子

lpush/rpush ?<key> ?<value1> ?<value2> ?<value3> ....
从左边/右边插入一个或多个值。

3.set类型

1)Redis的set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
2)Redis的set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

例子

sadd <key> ?<value1> ?<value2> ..... ??
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

4.hash类型

1)Redis的hash 是一个键值对集合。
2)Redis的hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
3)Redis的hash类似Java里面的Map<String,String>

例子

hset <key> ?<field> ?<value>
给<key>集合中的 ?<field>键赋值<value>

5.zset类型

1)Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
2)因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

例子

zadd ?<key> <score1> <value1> ?<score2> <value2>...

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

文章来源:https://blog.csdn.net/wwh1st/article/details/135621698
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。