Redis非关系性数据库有什么特点?
Redis 非关系型数据库简介
Redis是一款开源的、高性能的一个第三方软件,就是一个key-value存储系统。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。
redis是一种Nosql数据库,Nosql全称是Not Only SQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调Key-Value 存储和文档数据库的优点,而不是单纯的反对RDBMS.
为了获得优异的性能,Redis采用了内存中数据集(dataset)的方式。根据使用场景的不同,你可以每隔一段时间将数据集转存到磁盘上来持久化数据,或者在日志尾部追加每一条操作命令。
Redis同样支持主从复制(master-slave replication),并且具有非常快速的非阻塞首次同步(non-blocking first synchronization)、网络断开自动重连等功能。同时Redis还具有其它一些特性,其中包括简单的check-and-set机制、pub/sub和配置设置等,以便使得Redis能够表现得更像缓存(cache)。
Redis还提供了丰富的客户端,如ServiceStack.Redis,以便支持现阶段流行的大多数编程语言。详细的支持列表可以参看Redis官方文档:。Redis自身使用ANSI C来编写,并且能够在不产生外部依赖(external dependencies)的情况下运行在大多数POSIX系统上,例如:Linux、*BSD、OS X和Solaris等。
redis是一种Nosql数据库,Nosql全称是Not Only SQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调Key-Value 存储和文档数据库的优点,而不是单纯的反对RDBMS.
redis有哪些数据类型?
redis目前能够在缓存领域迅速蚕食鲸吞memcached的市场占比,能够在分布式架构中扮演重要的地位,都与其支持多种数据类型(而memcached只支持一种)这个优势有关。
redis支持存储的数据类型一共有5种,但是根据我的工作经验,最常用的只有三种,接下来,我就介绍下最常用的三种。
List
list是redis中常用的数据类型,能够进行头尾查找,插入,移除(lpop,lpush,rpop,rpush等等);
支持像Python一样的分片读取(lrange api);
可以按照索引查找队列中元素(lindex),删除队列中元素(lrem),修改队列中元素(lset),还能获取队列长度(llen)。
list还有一个更加突出的功能,它可以从当前队列弹出一个值,然后插入到另一个队列中(BRPOPLPUSH)。这个过程是原子的,保证了数据一致性,避免由于中间步骤失败而导致数值丢失。
Set
set其实和list类似,但是正如平时我们了解的set,首先它的存储是无序的,其次它的存储是去重的。也就是说,如果你需要记录数据的插入顺序,或者可能会插入重复数据,并且数据不可去重的话,用list就更合适些,其它场景,就可以考虑用set。
set可以进行基础的增删(sadd,srem),也能进行进行集合操作,比如求差集(sdiff),求交集(sinter),求并集(sunion),返回集合中全部元素,但是并不将它们弹出(smember)。同时set也支持像list一样,用一个原子操作,把一个元素从当前set弹出,并压入另一个set(smove)。
hash
hash是redis中最常用的一种数据结构,其实就是我们常说的map。
它是一个string型的key-value,因此特别适用于存储序列化对象。理论上,每个 hash 可以存储 40多亿个键值对。
hash的操作api要比set和list多了不少。
基础的有hset,hget,hdel,hexist(检查元素是否存在),hincrby(这个是为指定的整数字段加指定数值,相当于能够原子性的做到查找和修改,减少了我们自己去实现的麻烦)。
hash还有hgetAll,hgetKeys这种接口,能够批量的把hash中指定字段的全部内容都拉取回来。但是要慎用,我曾亲身经历过,在server高并发情况下,会导致server出现OOM。
除了上面介绍的常用的三种,redis还支持String和sorted set,但是由于不太常用,因此不在此介绍了。
以上是我的浅见,欢迎各位在下方评论区交流点赞。
我是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。

