Redis简介
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简介的更多相关文章
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- NoSQL和Redis简介及Redis在Windows下的安装和使用教程
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/103.html?1455869099 NoSQL简介 介绍redis前,我 ...
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...
- 1. redis简介
一. redis简介 Redis是一种面向"键/值"对数据类型的内存数据库,可以满足我们对海量数据的读写需求. redis的键只能是字符串,redis的值支持多种数据类型: (1) ...
- 分布式缓存技术redis学习(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- Redis简介以及如何在Windows上安装Redis
Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...
- Redis简介与简单安装
Redis简介与简单安装 一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...
- redis简介与持久化
一 . redis简介 redis属于NoSQL学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是key value形式 nosql有很多产品 ...
- Redis简介与安装
目录 Redis概述与安装使用 Redis概述与安装使用 Author:SimpleWu GitHub-redis Redis简介 Redis英语全称:( REmote DIctionary Serv ...
- (转载)Memcached和Redis简介
转载自: Memcached和Redis简介 博主的Redis资料列表.http://www.cnblogs.com/programlearning/category/1003158.html 前言: ...
随机推荐
- HTML 5 Web 存储
HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储sessionStorage - 针对一个 session 的数据存储 html5 web sto ...
- js一篇汇总
一.js的数据类型和变量 JavaScript 有六种数据类型.主要的类型有 number.string.object 以及 Boolean 类型,其他两种类型为 null 和 undefined. ...
- struts2、jsp的简单路径的简单拦截
<filter> <filter-name>UsersFilter</filter-name> <filter-class>com.web.UsersF ...
- Scalaz(47)- scalaz-stream: 深入了解-Source
scalaz-stream库的主要设计目标是实现函数式的I/O编程(functional I/O).这样用户就能使用功能单一的基础I/O函数组合成为功能完整的I/O程序.还有一个目标就是保证资源的安全 ...
- Discuz X2任务开发
简单描述 由于公司的需求要在系统中添加任务管理,用户通过完成任务而获得一定的奖励,因此其设计过程需要考虑到: 1.由于任务都是在系统中相关功能块处做一些相关事情,比如说在做题系统中完成指定的试题[1] ...
- GJM : Taurus.MVC 2.0 开源发布:WebAPI开发教程 [转载]
Taurus.MVC 2.0 开源发布:WebAPI开发教程 转载自http://www.cnblogs.com/cyq1162/p/6069020.html 因是新手 粘贴时有一个版权问题 本文原 ...
- js的几种数据类型
javascript的几种基本类型: null undefined Boolean string Number Object 我看到网上一篇文章说是typeof无法判断function,可是为什么我试 ...
- vue安装
条件:已安装 node&npm 1.安装 cnpm : $ npm install -g cnpm --registry=https://regis ...
- iOS UISlider的使用
UISlider是一个方便的控件,让用户能够以可视化的方式设置指定范围内的值. 和按钮一样,滑块也能响应事件,还可像文本框一样被读取.如果希望用户对滑块的调整立刻影响应用程序,则需要让他触发操作. 下 ...
- [Android]Activity启动过程
Android系统启动加载流程: 参考图 Linux内核加载完毕 启动init进程 init进程fork出zygote进程 zygote进程在ZygoteInit.main()中进行初始化的时候for ...