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. Lua使用心得(2)

    在lua脚本调用中,如果我们碰到一种不好的脚本,例如: while 1 do do end 那我们的程序主线程也会被阻塞住.那我们如何防止这种问题呢?下面就给出一个解决的办法. 首先为了不阻塞主线程, ...

  2. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  3. python signal(信号)

    信号的概念 信号(signal)--     进程之间通讯的方式,是一种软件中断.一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号. 几个常用信号: SIGINT     终止进程  中断进 ...

  4. Gym 100917J---Judgement(01背包+bitset)

    题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury ...

  5. 2016年湖南省第十二届大学生计算机程序设计竞赛Problem A 2016 找规律归类

    Problem A: 2016 Time Limit: 5 Sec  Memory Limit: 128 MB Description  给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) ...

  6. shell脚本(管理守护进程)

    工作中常常会遇到处理消息队列的消费者进程,这样的进程是一个守护进程,即一个服务.服务通常写个shell脚本来管理,查询服务的status  ,启动start 关闭stop  重启reload.最近在学 ...

  7. display---我的第一篇博客

    display:block显示为块级元素,换行 display:inline-block显示为块级内联元素,不换行,但是可以改变其宽度高度 display:inline显示为内联元素,不换行但是也不能 ...

  8. 25条来自 Google 的移动网站设计准则

    越来越的用于通过移动设备访问网络,因此对于企业来说,现在比以往任何时候都更需要一个移动网站.但是,怎么样才能制作一个优秀的移动网站呢? 为了回答这个问题,Google 与 AnswerLab 合作,研 ...

  9. 【HTML5】HTML5本地数据库(Web Sql Database)

    Web Sql数据库简介 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库. Web SQL数据库的浏览器支持情况 Web SQL 数 ...

  10. vue安装

     条件:已安装 node&npm 1.安装 cnpm :                      $ npm install -g cnpm --registry=https://regis ...