Redis入门

学习一个新事物,知道它的由来,才能知道它为什么产生。

下面的介绍来自百度百科

       Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。


       Redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)目前,Vmware在资助着redis项目的开发和维护。中文官方网站 http://www.redis.cn/ 。

       Redis的作者,叫Salvatore Sanfilippo,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于Pivotal公司。他使用的网名是antirez。

       Redis的版本大家可以在 http://www.redis.cn/update.html 这里查看,截止到17年2月7日,最新版本为3.2.6。

Redis定义
       Redis是一个key-value 存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list( 链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些 数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了 memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 [1]  

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

Redis开发语言支持

      许多语言都包含Redis支持

     这里的许多开发语言我还没听说过,差距啊

Redis值类型

       Redis的外围由一个键、值映射的 字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型 [1]   不仅限于 字符串,还支持如下抽象数据类型:
      值的类型决定了值本身支持的操作。Redis支持不同无序、有序的 列表,无序、有序的 集合间的交集、并集等高级服务器端原子操作(确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值))

Redis存储
      Redis使用了两种 文件格式:全量数据和增量请求。

      全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;

      增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。

      redis的存储分为内存存储、 磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

      save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将 数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

      appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
appendfsync no/always/everysec ,appendfsync配置,no表示等 操作系统进行 数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。   

Redis 有三个主要使其有别于其它很多竞争对手的特点:
    • Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的; 

    • Redis相比许多键值数据存储系统有相对丰富的数据类型;  

    • Redis可以将数据复制到任意数量的从服务器中; 

Redis优点

    • 异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。

    • 支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。

    • 操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。

    • MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;

Redis环境

要在 Ubuntu 上安装 Redis,打开终端,然后输入以下命令:

$sudo apt-get update
$sudo apt-get install redis-server
这将在您的计算机上安装Redis

启动 Redis

$redis-server

查看 redis 是否还在运行

$redis-cli
这将打开一个 Redis 提示符,如下图所示:
redis 127.0.0.1:6379>
在上面的提示信息中:127.0.0.1 是本机的IP地址,6379是 Redis 服务器运行的端口。现在输入 PING 命令,如下图所示:
redis 127.0.0.1:6379> ping
PONG
这说明现在你已经成功地在计算机上安装了 Redis。

在Ubuntu上安装Redis桌面管理器

要在Ubuntu 上安装 Redis桌面管理,可以从  http://redisdesktop.com/download 下载包并安装它。
Redis 桌面管理器会给你用户界面来管理 Redis 键和数据。


Redis数据类型

Redis 支持5种数据类型,说明如下:

字符串

Redis 字符串是一个字节序列。在 Redis 中字符串是二进制安全的,这意味着它们没有任何特殊终端字符来确定长度,所以可以存储任何长度为 512 兆的字符串。

示例

redis 127.0.0.1:6379> SET name "yiibai"
OK
redis 127.0.0.1:6379> GET name
"yiibai"
在上面的例子中,SET 和 GET 是 Redis 命令,name 和 "yiibai" 是存储在 Redis 的键和字符串值。

哈希

Redis哈希是键值对的集合。 Redis哈希是字符串字段和字符串值之间的映射,所以它们用来表示对象。

示例

redis 127.0.0.1:6379> HMSET user:1 username yiibai password yiibai points 200
OK
redis 127.0.0.1:6379> HGETALL user:1

1) "username"
2) "yiibai"
3) "password"
4) "yiibai"
5) "points"
6) "200"
在上面的例子中,哈希数据类型用于存储包含用户基本信息的用户对象。这里 HSET,HEXTALL 是 Redis 命令同时 user:1 也是一个键。

列表

Redis 列表是简单的字符串列表,通过插入顺序排序。可以添加一个元素到 Redis 列表的头部或尾部。

示例

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

1) "rabitmq"
2) "mongodb"
3) "redis"
列表的最大长度为   2 32  - 1 个元素(4294967295,每个列表的元素超过四十亿)。

集合

Redis 集合是字符串的无序集合。在 Redis 可以添加,删除和测试成员存在的时间复杂度为 O(1)。

示例

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

1) "rabitmq"
2) "mongodb"
3) "redis"
注:在上面的例子中 rabitmq 被添加两次,但由于它是只集合具有唯一特性。集合中的成员最大数量为  2 32  - 1(4294967295,每个集合有超过四十亿条记录)。

集合排序

不同的是,一个有序集合的每个成员都可以排序,就是为了按有序集合排序获取它们,按权重分值从最小到最大排序。虽然成员都是独一无二的,按权重分数值可能会重复。

示例

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

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

Redis键

Redis 中的 keys 命令用于管理 redis 中的键。Redis keys命令使用的语法如下所示:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

示例

redis 127.0.0.1:6379> SET yiibai redis
OK
redis 127.0.0.1:6379> DEL yiibai
(integer) 1
在上面的例子中 DEL 是一个命令,而 yiibai 是一个键。如果键被成功删除,则该命令的输出将是(整数)1,否则这将是(整数)0;

Redis字符串

Redis 的字符串命令用于管理 redis 的字符串值。Redis 的字符串命令语法的使用如下所示:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

示例

redis 127.0.0.1:6379> SET yiibai redis
OK
redis 127.0.0.1:6379> GET yiibai
"redis"
在上面示例中 SET 和 GET 是 Redis 的命令,这里 yiibai 就是一个键(key);

Redis哈希

Redis哈希是字符串字段和字符串值之间的映射,所以它是用来表示对象的一个完美的数据类型,Redis 的哈希值最多可存储超过4十亿字段-值对。

示例

redis 127.0.0.1:6379> HMSET yiibai name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL yiibai

1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
在上面的例子,我们在设置一个名为 yiibai Redis的哈希的教程详细信息(name, description, likes, visitors)。

Redis列表

Redis列表是简单的字符串列表,通过插入顺序排序。您可以在Redis 列表的头或列表尾添加元素。列表的最大长度为    2 32  - 1 个元素(4294967295,每个列表可有超过四十亿个元素)。

示例

redis 127.0.0.1:6379> LPUSH tutorials redis
(integer) 1
redis 127.0.0.1:6379> LPUSH tutorials mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH tutorials mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE tutorials 0 10

1) "mysql"
2) "mongodb"
3) "redis"
在上面的例子中的三个值由命令LPUSH 插入到 redis 名称为 tutorials 的列表。

Redis集合

Redis集合是唯一字符串的无序集合。唯一集合是不允许数据有重复的键的。在 Redis 集合中添加,删除和测试成会是否存的时间复杂度为O(1)(恒定的时间,无论集合内包含元素的数量)。集合的最大长度为     2 32  - 1 个元素(4294967295,每个集合中超过四十亿个元素)。

示例

redis 127.0.0.1:6379> SADD yiibai redis
(integer) 1
redis 127.0.0.1:6379> SADD yiibai mongodb
(integer) 1
redis 127.0.0.1:6379> SADD yiibai mysql
(integer) 1
redis 127.0.0.1:6379> SADD yiibai mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS yiibai

1) "mysql"
2) "mongodb"
3) "redis"
在上面的例子中的三个值被 Redis 的命令SADD插入到一个名为 yiibai 集合。

Redis有序集合

Redis的有序集合类似于 Redis 的集合,但是存储的值在集合中具有唯一性。另外有序集合的每个成员都使用分值(score)的东西,这个分值就是用于将有序集合排序,从分值最小到最大来排序。

在 Redis 有序集合添加,删除和测试成员的存在的时间复杂度为 O(1)(恒定时间,无论集合内包含元素的数量)。列表的最大长度为 232 - 1 个元素(4294967295,每个集合的元素超过四十亿)。 

示例

redis 127.0.0.1:6379> ZADD yiibai 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD yiibai 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD yiibai 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD yiibai 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD yiibai 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE yiibai 0 10 WITHSCORES

1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
在上面的例子中的三个值及其分值被 ZADD 命令插入一个名称为 yiibai 的 redis 有序集合中


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值