Redis是一个偏重于in-memory的key-value数据库,这样讲有点儿不准确,但是很容易将Redis简单分类。更准确的讲Redis是一个数据结构的存储服务。它的value不仅仅只有string,他的value可以是下面几种:

  • string
  • list
  • set
  • zset(ordered set)
  • hash

正是它有不同的数据结构,将其于其他的NoSQL数据库区别开来。在传统的关系数据库中只有表格这种灵活,复杂的数据结构,我们的应用数据最终都将转换成table这种数据结构进行存储,这么多年过来,事实证明这是可行的,但是我们可以做的更好。在传统关系数据库中,我们这种可行通常牺牲了两个东西:首先是性能,其次是复杂度。而这两点正是Redis试图解决的。在Redis中,若你的建模结果发现key-value更适合你,那么你就用key-value。若你的模型中确实需要hash,那么为什么不直接选key-hash?用更加直接的数据结构是Redis所提倡和擅长的。

1,运行Redis服务

为了运行Redis服务,我们需要下载源码,编译,安装Redis。Redis推荐从源代码安装Redis,这样能保证安装到最新版本的Redis。我是在Windows上测试Redis,所以讲下Windows下的编译安装,如果你不想自己编译,可以直接下载编辑好的Win32或Win64编译好的版本。

首先,从https://github.com/MSOpenTech/redis下载源代码,直接“download as ZIP”。如果你不想自己编译,直接使用redis-2.6/bin/release下的编译好的可执行文件。编译过程也十分简单,用VS2010打开redis-2.6/msvs/RedisServer.sln,然后直接编译,不出意外,你就可以从msvs的Debug或者Release目录(根据你的编译选项)找到编译好的可执行文件。我们来看看这些编译好的可执行文件和这些文件的功能。

  • redis-server  #服务器
  • redis-cli        #命令行客户端
  • redis-benchmark    #性能测试
  • redis-check-aof & redis-check-dump #处理可能损坏的dump文件

Redis使用相对简单,特别是测试时候,只要一个redis-server就可以了,所谓的redis服务的安装就是将redis-server加到可执行目录,然后自启动就可以。对于初次使用,我们只需要:

>redis-server

这样redis就在6379向我们提供服务了,一个可以测试的完整的redis server已经成功建立了。

当然,我们可以配置一些redis server的一些行为,但这不是我们这里讨论的重点。简单讲我们可以

>redis-server /path/to/redis.conf

redis.conf的文件和说明,可以在redis-2.6/redis.conf中找到,更多的说明参考:http://redis.io/topics/config

2,做一些简单测试

在我们编译好的文件中有redis-cli.exe,这个是redis自带的命令行客户端,我们可以通过这个命令行客户端来操作redis server。我们直接:

>redis-cli

就可以连接上我们本机上的redis服务了。更多的选项可以>redis-cli –help

对5种数据结构的简单操作:

--string
redis 127.0.0.1:6379> set users:jcu:name "Jerry Chou"
OK
--list
redis 127.0.0.1:6379> lpush users:jcu:cities Beijing
(integer) 1
redis 127.0.0.1:6379> lpush users:jcu:cities Shanghai
(integer) 2
redis 127.0.0.1:6379> lpush users:jcu:cities Guangzhou
(integer) 3
--set
redis 127.0.0.1:6379> sadd users:jcu:likes music
(integer) 1
redis 127.0.0.1:6379> sadd users:jcu:likes book
(integer) 1
redis 127.0.0.1:6379> sadd users:jcu:likes sport
(integer) 1
redis 127.0.0.1:6379> sadd users:jcu:likes book #re-adding book will not added to the set
(integer) 0
--ordered set
redis 127.0.0.1:6379> zadd users:jcu:scores 99 cs
(integer) 1
redis 127.0.0.1:6379> zadd users:jcu:scores 90 music
(integer) 1
redis 127.0.0.1:6379> zadd users:jcu:scores 80 math
(integer) 1
redis 127.0.0.1:6379> zadd users:jcu:scores 60 art
(integer) 1
--hash
redis 127.0.0.1:6379> hset users:jcu:securities hr 001
(integer) 1
redis 127.0.0.1:6379> hset users:jcu:securities rd 002
(integer) 1
redis 127.0.0.1:6379> hset users:jcu:securities ls 008
(integer) 1 --output
redis 127.0.0.1:6379> get users:jcu:name
"Jerry Chou" redis 127.0.0.1:6379> lrange users:jcu:cities 0 -1
1) "Guangzhou"
2) "Shanghai"
3) "Beijing" redis 127.0.0.1:6379> smembers users:jcu:likes
1) "music"
2) "sport"
3) "book" redis 127.0.0.1:6379> zrange users:jcu:scores 0 90
1) "art"
2) "math"
3) "music"
4) "cs" redis 127.0.0.1:6379> hget users:jcu:securities rd
"002"

2.1 命令的分类

分类是帮助记忆的最好方式,在官方页面:http://redis.io/commands 已经将命令进行了分类:

基本就可以分为操作5种数据结构的命令,数据库管理状态命令,订阅/发布管理,事物(transaction)命令。通过分类我们可以更加快速的找到我们所需要的命令。

3,在具体的应用中使用Redis

redis-cli是我们命令行的客户端,我们在将Redis集成到自己的应用中的时候不可能用redis-cli命令行工具。Redis的官方网站上列出的Redis支持的语言绑定,对于常见的语言我们可以直接使用。我们通过一个简单的聊天程序来看看怎么在项目中使用Redis。

3.1 聊天程序分析

首先我们来想想我们的应用需求,然后抽象成模型,最后对应于相应的数据结构。对于一个聊天程序我们需要什么?

  • 好友
  • 能发消息给好友
  • 能查看聊天记录
  • 自己的个性设置

上面这些需求是一个聊天程序的核心。对于好友,其实就是人们间的关系,对于单个用户来说的话就是me to many users,也是一种一对多的关系,而且好友具有不重复性和无序性。对应于Redis的数据结构正好是Set。

而能够发消息给好友是我们聊天交流的基础,细分开来还可以分为可以给在线好友发送消息和可以给离线好友发送消息,这里我们为了简化,我们只考虑给在线好友发送消息的情况。当一个用户上线了,这个用户可以说:I am ready,我可以收消息了,换个说法就是我在监听所有好友发送给我的消息。抽象出来这是一个观察者模式,对应于Redis,我们可以用订阅/发布功能来实现。

聊天记录其实就是一个有序的列表,这个太直白不过了,自己个性设置,我们可以看做一个用户有许多属性,这里我们用hash来实现。

  • 好友 –> Set
  • 能发消息给好友  -> Pub/Sub
  • 能查看聊天记录  -> ZSet
  • 自己的个性设置  -> Hash

3.2 聊天程序的总体架构和技术选择

https://docs.google.com/drawings/d/1WArrjazS-1cwCoBysHqj4QDJ56oveUhHXSrt4IPp8PY/edit?usp=sharing

技术选择总体来说是个人偏好,你可以根据自己的需要来设计自己的架构和选择合适的技术。

3.3 聊天程序源代码

https://github.com/jatsz/chat-app-with-redis

Redis简介的更多相关文章

  1. 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  2. NoSQL和Redis简介及Redis在Windows下的安装和使用教程

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/103.html?1455869099 NoSQL简介 介绍redis前,我 ...

  3. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)

    1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...

  4. 1. redis简介

    一. redis简介 Redis是一种面向"键/值"对数据类型的内存数据库,可以满足我们对海量数据的读写需求. redis的键只能是字符串,redis的值支持多种数据类型: (1) ...

  5. 分布式缓存技术redis学习(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  6. Redis简介以及如何在Windows上安装Redis

    Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...

  7. Redis简介与简单安装

    Redis简介与简单安装   一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...

  8. redis简介与持久化

    一 . redis简介 redis属于NoSQL学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是key value形式 nosql有很多产品 ...

  9. Redis简介与安装

    目录 Redis概述与安装使用 Redis概述与安装使用 Author:SimpleWu GitHub-redis Redis简介 Redis英语全称:( REmote DIctionary Serv ...

  10. (转载)Memcached和Redis简介

    转载自: Memcached和Redis简介 博主的Redis资料列表.http://www.cnblogs.com/programlearning/category/1003158.html 前言: ...

随机推荐

  1. line-height 属性

    p.small {line-height:90%} p.big {line-height:200%}     该属性会影响行框的布局.在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最 ...

  2. Firemonkey 调整 MainMenu 字型大小 (D10)

    修改 Windows 下的 Style,找到下面二个 Style ,修改其中的 text 内的 font 大小: 将 FMX.Menus.pas 复制到自己的工程目录内,再修改如下内容: constr ...

  3. 开始自学H5前端-第一天

    自从iOS工作丢了后 就萌生了自学这个想法 但是一直在纠结学哪一门语言好 我是计算机科学与技术专业的 其实对于我来说 学啥都算是有点基础的 但是被iOS坑惨了之后 就会不自觉的进行各个方向和前景分析 ...

  4. jQUery操作checkbox

    1 2 3 <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script> <s ...

  5. 如何在MFC对话框应用程序中使用ColorPicker控件

    在日常的应用程序开发中,当涉及到曲线绘制时,为了将多条不同类型的曲线区分开,常常需要将它们指定不同的颜色.今天在这里简单的记录一下,如何实现及使用ColorPicker控件.程序用到4个文件依次为:C ...

  6. Spring中的事务

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  7. 前端mvc框架backbone.js入门

    关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以长久生存,通常都是有其特定优势和擅长点的. 使用backbone.js作为前端框架的应用通常都是htm ...

  8. Atitit.atiRI  与 远程调用的理论and 设计

    Atitit.atiRI  与 远程调用的理论and 设计 1. 怎么做到透明化远程服务调用?1 2. 2  怎么对消息进行编码和解码1 2.1.  确定消息数据结构dsl1 2.1.1. 消息里为什 ...

  9. 用css 制作三角

    html代码: <div class="div"></div> css代码: .div{ border-top:40px solid #ff0077; bo ...

  10. [整理]详记被忽略的Get与Post

    [事发]使用了近5年的项目,来了一个最最基本的bug画面输入+号,跳转至后画面,+号变成了空格![原因]画面使用url(get)方法传参数,并且没有进行url转码!恐怖的是,几乎所有页面都是如此... ...