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

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中的索引数组,但数据集中的元素是唯一的,列表可以不是唯一