Redis 的数据类型和应用
06 Oct 2017Redis 是 Key-Values 数据库.它的速度非常快,适合写很重、数据变化频繁、数据适合Redis内部数据类型的应用。 但它不适合存储只有一部分热点数据的大数据集,或者数据集不适合存在内存中。
No-SQL 数据库一般不提供 ACID(atomicity,consistency,isolation,durability),或者部分提供它提供了部分的 ACID。 Redis 实现了部分的ACID:
- 单线程,保证了一致性和独立性(isolation)
- Full compliance (如果配置了 appendfync)
- Durability
String
字符串是 Redis 中最简单的数据类型,能存储任何种类的字符串,包括二进制数据。 需要记住的是字符串值的最大长度是 512MB。string 可以用于存储用户访问计数器,假如将网站的所有网页都有一个唯一的 pageid, 则网页的访问次数可以用 visits:pageid:total 表示. redis 提供了 incr 和 decr 来递增或者递减 value 保存的值,incrby 和 decrby 来增加或者减少指定key的values。
string 常用命令
127.0.0.1:6379> set visits:1:totals 1233
OK
127.0.0.1:6379> get visits:1:totals
"1233"
127.0.0.1:6379> incr visits:1:totals
(integer) 1234
127.0.0.1:6379> decr visits:1:totals
(integer) 1233
127.0.0.1:6379> incrby visits:1:totals 1
(integer) 1234
127.0.0.1:6379> decrby visits:1:totals 1
(integer) 1233
Hash
Hash 特别适合存储应用使用的对象数据. 假如要保存用户类型对象alias的数据,则 key 可以为 users:alias. 通过 hset 可以指定保存对象aalias 的字段的值。
Hash 常用命令
127.0.0.1:6379> hset users:joy name "John Doe"
(integer) 1
127.0.0.1:6379> hset users:joy email "jdoe@test.com"
(integer) 1
127.0.0.1:6379> hget users:joy name
"John Doe"
127.0.0.1:6379> hget users:joy email
"jdoe@test.com"
127.0.0.1:6379> hgetall users:joy
1) "name"
2) "John Doe"
3) "email"
4) "jdoe@test.com"
127.0.0.1:6379> hkeys users:joy
1) "name"
2) "email"
127.0.0.1:6379> hvals users:joy
1) "John Doe"
2) "jdoe@test.com"
Set
无序集合是数据的集合,不能有重复的元素。它适合保存Google+ 中的朋友圈或者兴趣小组的用户集合。Redis的 sinter 能查询两个集合的交集, sunion 查询两个集合的并集。
Set 常用命令
127.0.0.1:6379> sadd cicrle:jdoe:family users:anana
(integer) 1
127.0.0.1:6379> sadd cicrle:jdoe:family users:mike
(integer) 1
127.0.0.1:6379> sadd cicrle:jdoe:family users:richard
(integer) 1
127.0.0.1:6379> smembers cicrle:jdoe:family
1) "users:mike"
2) "users:richard"
3) "users:anana"
127.0.0.1:6379> sadd cicrle:jdoe:soccer mike
(integer) 1
127.0.0.1:6379> sadd cicrle:jdoe:soccer users:mike
(integer) 1
127.0.0.1:6379> sadd cicrle:jdoe:soccer users:adam
(integer) 1
127.0.0.1:6379> smembers cicrle:jdoe:soccer
1) "users:mike"
2) "users:adam"
127.0.0.1:6379> sinter cicrle:jdoe:soccer cicrle:jdoe:family
1) "users:mike"
127.0.0.1:6379> sunion cicrle:jdoe:soccer cicrle:jdoe:family
1) "users:anana"
2) "users:richard"
3) "users:mike"
4) "users:adam"