浅谈Redis---(1)

本文为Redis系列的第一部分,将从Redis的简介、安装配置和数据类型三个方面进行介绍。
现在越来越多的场景开始广泛使用Redis缓存数据库,除了众所周知的速度极快这个优点,还有其他的特性吗?答案是肯定的。前几天在一个微信公众号里看到有人讲这个,今天拿出来分享一下。
新浪微博是全球最大的的Redis集群用户,面对微博常常出现的热点数据,Memcached+mysql解决方案已不能满足,由于Memcached未有命中,会大量穿透至Mysql服务器,瞬间造成连接数疯涨,这无疑是一场灾难。这也是新浪使用Redis的最大原因之一。

Redis简介

REmote DIctionary Server(Redis)是完全开源的,免费的,遵守BSD协议的高性能key-value数据库。上述这句话算是对Redis的高度精炼的概括了。BSD协议的百度百科
那么和其他key-value的数据库相比,又什么优点呢?
1.支持数据持久化,内存内数据存至磁盘中。同时磁盘格式方面是追加的方式产生的,因为并不需要进行随机访问。
2.value值可以为list,set,zset,hash,String等数据结构的存储,同时对这些value进行原子性操作(要么完整被执行,要么不执行)。
3.支持数据的备份,即master-slave备份。

Redis的安装配置

版本不同安装略有差异,比较一般的解法就是去官网下包,然后在本地解压。官方下载地址:http://redis.io/download
我的本机是Fedora 24,所以介绍一下直接在本地的安装配置方法:
本教程使用的是当前最新的4.0.1版本,所以安装如下

$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar xzf redis-4.0.1.tar.gz
$ cd redis-4.0.1
$ make

make之后只需要等待一段时间就好。成功之后,开始测试

$ src/redis-server

运行这个之后不要将窗口关闭,可以理解为是打开了服务端。
然后在新的窗口中运行:

$ src/redis-cli

便打开了客户端,可以开始跑redis命令了

redis> set foo bar
OK
redis> get foo
"bar"

输出正常代表安装成功。整个过程还是较为简单的,没有什么比较棘手的BUG。

数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1.String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

实例:

redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"

2.Hash(哈希)
Redis hash 是一个键名对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

实例:

127.0.0.1:6379> HMSET user:1 username runoob password runoob points 200
OK
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "runoob"
3) "password"
4) "runoob"
5) "points"
6) "200"

以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HGETALL 命令,user:1 为键值。
每个 hash 可以存储 232 -1 键值对(40多亿)。

3.List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

实例:

redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>

4.Set(集合)
Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

实例:

redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob

1) "rabitmq"
2) "mongodb"
3) "redis"

注:以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

5.zet(Sorted set有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

实例:

redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000

1) "redis"
2) "mongodb"
3) "rabitmq"

你可能感兴趣的:(大数据,分布式应用)