Redis有哪几种数据类型?

Redis是一个开源的内存存储的数据结构数据库,它可以作为数据库,缓存,消息队列。支持多种数据格式。和mc相比具有数据持久化的能力。并能通过哨兵和集群提高可用性。

它具有以下数据类型:

 

字符串类型

在Redis里面采用的是SDS来封装char[]的,这个也是redis的最小存储单元。RedisObject是redis的基本数据类型,对照C#中的Object对象。而字符串类型就是在RedisObject基础上封装的代码。

其中的incr,incrby命令可以实现原子自增,用它来生成唯一订单号比较方便。因为如果在当前服务器生成一个订单号,如果面对高并发的情况有可能会产生两个相同的订单号。

 

不同类型均可调用的命令:

Exists key可以检测键是否存在

Type key 可返回key对应值的存储类型

Expires key seconds 可设置key的存在时间

Persist key 可设置key为持久化

TTL key 返回key剩余的存在时间

 

列表类型

List类型按照插入顺序排序,最常用作消息队列,常用的就四个方法LPOP,LPUSH,RPOP,RPUSH。我们可将能够异步处理的请求放到消息队列中去。

 

哈希类型

Redis中的哈希类型,可以用来存放对象了,类似与C#中的Dictionary以键值对的形式存放数据

 

集合类型

集合类型是哈希类型的“简易版”,它比Dictionary节省很多内存消耗,类似C#的HashSet类型。底层数据结构和哈希类型类似,只是value为null,所以key不能重复,且无序。

 

有序集合类型

有序集合和哈希类型的最大区别就是范围查找时它的时间复杂度为O(logN) + M,后者为O(N)。它的每一个字符串元素都会关联到score,里面的元素总是通过score进行排序。

 

事务

Multi,Exec,Discard,Watch是Redis的事务命令。事务一般分为3个步骤:生成事务(Multi),生成命令(各种Redis命令),执行命令(Exec)。

Redis中没有回滚的说法。因为Redis命令只有在因语法错误而失败,或是命令用在了错误类型的键上面。这也就是说是由于编程错误造成的。而且不支持回滚也可以让Redis保持快速且简单。

 

假如在你执行命令的过程中,要修改的那些数据发生了改变,那我执行的命令有什么用呢?所以Watch命令就是为此而生的。Watch命令的作用就是假如在multi之后exec之前这段时间里key的值发生了修改,那么exec就会失败。你只需要在multi之前用watch去监视key就行。

 

订阅/发布

很多的消息队列都有这个功能,比较常见的场景是邮件订阅,比如你订阅了某个作者的博客,如果博主发了文章那么那些订阅了它的读者就能收到通知。

常见的命令就两个:subscribe channel 订阅频道,publish channel message 给指定频道发布消息

还有一个就是psubscribe pattern 订阅复合模式的频道。

 

持久化

Redis有两种持久化方式RDB(也叫快照)和AOF。快照指的是每隔一段时间就对你的数据进行一次存储。AOF则会记录每一次对服务器的写入操作,当服务器重启时会重新执行这些命令恢复原始数据,而且redis还会对aof文件进行重写防止过大。

你可以同时开启两种持久化方式。

快照的优点是可以最大化redis的性能,缺点是可能会丢失几秒钟甚至几分钟的数据。

AOF的优点是让redis更加耐久,默认是每秒保存一次数据,缺点是AOF的速度可能会比快照慢一些。

 

快照的配置方法可为:在配置文件SNAPSHOTTING节中,标记save seconds change,后面再设置以下存储的位置即可。

AOF的配置方法为:在配置文件的APPEND ONLY MODE节中,设置appendonly yes(默认配置),再指定存储文件,保存频率,这里推荐采用默认配置appendfsync everysec即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章