Redis数据类型理解和区别

基本介绍

Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统。由于 Redis 的键包括 string,hash,list,set,sorted set,bitmap 和 hyperloglog,所以常常被称为数据结构服务器。你可以在这些类型上面运行原子操作,例如,追加字符串,增加哈希中的值,加入一个元素到列表,计算集合的交集、并集和差集,或者是从有序集合中获取最高排名的元素。

为了满足高性能,Redis 采用内存 (in-memory) 数据集 (dataset)。根据你的使用场景,你可以通过每隔一段时间转储数据集到磁盘,或者追加每条命令到日志来持久化。持久化也可以被禁用,如果你只是需要一个功能丰富,网络化的内存缓存。

Redis 还支持主从异步复制,非常快的非阻塞初次同步、网络断开时自动重连局部重同步。 其他特性包括:

事务 订阅/发布 Lua 脚本
带 TTL 的键 LRU 回收健
自动故障转移 (failover) 你可以通过多种语言来使用 Redis。

Redis 是由 ANSI C 语言编写的,在无需额外依赖下,运行于大多数 POSIX 系统,如 Linux、*BSD、OS X。Redis 是在 Linux 和 OS X 两款操作系统下开发和充分测试的,我们推荐 Linux 为部署环境。Redis 也可以运行在 Solaris 派生系统上

数据类型

string

在Redis中的字符串类似与javascript中的string和number,除了使用set和get,还可以对数字进行递增和递减

127.0.0.1:6379> set online.users 0  
OK  
127.0.0.1:6379> incr  online.users  
(integer) 1
127.0.0.1:6379> incr  online.users  
(integer) 2

哈希

在Redis中哈希类似子对象,不过和MongoDB不同是这些子对象只能局限于字符串形式的键和值,可以使用hgetall和hset对哈系进行操作

在Redis中只能这样

{
   "name":"myfreax.com",
   "last":"test"
}

而在MongoDB中

{
   "name":"myfreax.com",
   "last":{
       name:"freax"
   }
}

也就是说Redis的哈希中不能再嵌套其它数据类型

列表

在Redis中的列表就等同于javascript中的字符串数组,也可以说PHP中的索引数组,可以使用lpush和rpush把数据插入列表,lrange可以返回列表数据

127.0.0.1:6379> lrange profile.1.jobs 0 -1  
1) "job1"  
2) "job2"  
127.0.0.1:6379> rpush profile.1.jobs "job1"  
(integer) 3
127.0.0.1:6379> lrange profile.1.jobs 0 -1  
1) "job1"  
2) "job2"  
3) "job1"  
127.0.0.1:6379>  

数据集

数据集处于列表和哈希之间,它拥有哈希的属性,即数据集中的每一项都是唯一不重复的,换句话说,我们要保证数据的唯一性时就可以使用数据集,数据集中永远不会出现重复的元素

127.0.0.1:6379> sadd myset "a numbers"  
(integer) 1
127.0.0.1:6379> smembers myset  
1) "a numbers"  
127.0.0.1:6379> sadd myset "a numbers"  
(integer) 0
127.0.0.1:6379> smembers myset  
1) "a numbers"  

既然等同哈希中的键,操作数据集中的每一项都是固定时长

有序数据集

有序数据集拥有数据集所有特性,不过,顾名思义,它是有序的,使用有序数据集情况较少,属于高级用法

列表与数据集

发现列表和数据集都有共同特征类似PHP中的索引数组,但数据集中的元素是唯一的,列表可以不是唯一

你的欣赏是我最大的动力

Yanxiong Huang

My name is Yanxiong Huang. graduated from Nanyang middle school.Love Linux,familiar with Node.js,Docker,Serverless... and more Web technology.Contact Me:QQ 31356617;Email:huangaynxiong2013@gmail.com

guangzhou,china http://www.myfreax.com

乐在分享