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 前言: ...
随机推荐
- Nofuser - deobfuscator for Confuser
google搜索了好久,最终找到这个工具,可直接使用. 虽然脱后有很多无用代码,但关键代码是还是很清晰的! ----------------------------NoFuser----------- ...
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境 http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...
- [函数] Firemonkey iOS 指定目录不要备份到 iCloud
uses iOSapi.Foundation, Macapi.Helpers; // 不要备份到 iCloud by Aone function addSkipBackupAttributeToIte ...
- 【FFmpeg】Windows下FFmpeg编译
由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...
- Java识别操作系统
/** * Created by xfyou on 2016/11/3. */ public class SysDep { final static String UNIX_NULL_DEV = &q ...
- MongoDB环境准备
1.安装MongoDB MongoDB的安装非常简单,只需要将下载的MongoDB的压缩文件解压到任意目录,并将其中的bin目录加入到系统的path环境变量中即可 2.启动MongoDB 在启动Mon ...
- 获取spring容器要小心的坑
情景: 今天想把一个web应用中的上传路劲更改一下 于是就在配置文件作了如下变动: <bean id="uploadServelt" class="com.xxxx ...
- ASP.NET 多语言的实现(后台消息+前台消息+页面自动绑定)
一 前言 界面支持多种语言,在使用ASP.NET自带的多语言方案时遇到下列问题: 在做管理类的功能时,有添加.修改和查看页面,需要支持多语言的控件基本相同,但要维护多处,产生冗余(ASP.NET有共享 ...
- Sitecake – 可视化编辑,所见即所得的 CMS
Sitecake 是一个易于使用的,用于制作小型网站的 CMS(内容管理系统).提供所见即所得.拖拽操作的编辑器.只需要安装标准的虚拟主机包(Web服务器和 PHP 5.4+)就可以了.Sitecak ...
- Vault 不同版本的API的异同
大家知道,Autodesk Vault 2014有几个版本,依次为( Basic, Workgroup, Professional),不同版本的功能不相同,关于Vault产品功能的不同之处可以在Vau ...