redis初学者你有福了—带你进入Redis不一样的世界( 三 )


很多时候 , 我们都将redis中的有序集合叫做zsets , 这是因为在redis中 , 有序集合相关的操作指令都是以z开头的 , 比如zrange、zadd、zrevrange、zrangebyscore等等
老规矩 , 我们来看几个生动的例子:

//新增一个有序集合myzset , 并加入一个元素baidu.com , 给它赋予的序号是1:
127.0.0.1:6379> zadd myzset 1 baidu.com
 
(integer) 1
 
//向myzset中新增一个元素360.com , 赋予它的序号是3
 
127.0.0.1:6379> zadd myzset 3 360.com
 
(integer) 1
 
//向myzset中新增一个元素google.com , 赋予它的序号是2
 
127.0.0.1:6379> zadd myzset 2 google.com
 
(integer) 1
 
//列出myzset的所有元素 , 同时列出其序号 , 可以看出myzset已经是有序的了 。
 
127.0.0.1:6379> zrange myzset 0 -1 with scores
 
1) "baidu.com"
 
2) "1"
 
3) "google.com"
 
4) "2"
 
5) "360.com"
 
6) "3"
 
//只列出myzset的元素
 
127.0.0.1:6379> zrange myzset 0 -1
 
1) "baidu.com"
 
2) "google.com"
 
3) "360.com"
【redis数据结构 – 哈希】
最后要给大家介绍的是hashes , 即哈希 。哈希是从redis-2.0.0版本之后才有的数据结构 。
hashes存的是字符串和字符串值之间的映射 , 比如一个用户要存储其全名、姓氏、年龄等等 , 就很适合使用哈希 。
我们来看一个例子:
//建立哈希 , 并赋值
 
127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34
 
OK
 
//列出哈希的内容
 
127.0.0.1:6379> HGETALL user:001
 
1) "username"
 
2) "antirez"
 
3) "password"
 
4) "P1pp0"
 
5) "age"
 
6) "34"
 
//更改哈希中的某一个值
 
127.0.0.1:6379> HSET user:001 password 12345
 
(integer) 0
 
//再次列出哈希的内容
 
127.0.0.1:6379> HGETALL user:001
 
1) "username"
 
2) "antirez"
 
3) "password"
 
4) "12345"
 
5) "age"
 
6) "34"
????有关hashes的操作 , 同样很丰富 , 需要时 , 大家可以从这里查询 。
【聊聊redis持久化 – 两种方式】
redis提供了两种持久化的方式 , 分别是RDB(Redis DataBase)和AOF(Append Only File) 。
RDB , 简而言之 , 就是在不同的时间点 , 将redis存储的数据生成快照并存储到磁盘等介质上;
AOF , 则是换了一个角度来实现持久化 , 那就是将redis执行过的所有写指令记录下来 , 在下次redis重新启动时 , 只要把这些写指令从前到后再重复执行一遍 , 就可以实现数据恢复了 。
其实RDB和AOF两种方式也可以同时使用 , 在这种情况下 , 如果redis重启的话 , 则会优先采用AOF方式来进行数据恢复 , 这是因为AOF方式的数据恢复完整度更高 。
如果你没有数据持久化的需求 , 也完全可以关闭RDB和AOF方式 , 这样的话 , redis将变成一个纯内存数据库 , 就像memcache一样 。
【聊聊redis持久化 – RDB】
RDB方式 , 是将redis某一时刻的数据持久化到磁盘中 , 是一种快照式的持久化方法 。
redis在进行数据持久化的过程中 , 会先将数据写入到一个临时文件中 , 待持久化过程都结束了 , 才会用这个临时文件替换上次持久化好的文件 。正是这种特性 , 让我们可以随时来进行备份 , 因为快照文件总是完整可用的 。
对于RDB方式 , redis会单独创建(fork)一个子进程来进行持久化 , 而主进程是不会进行任何IO操作的 , 这样就确保了redis极高的性能 。


推荐阅读