redis 基础 入门

学习redeis初衷,系统并发量越来越大,由于需要开发分布式的应用, 前端由nginx反向代理分发http请求到上游服务节点,节点是单独tomcat部署存在,需要对session进行统一管理 ,借助tomcat的redis插件把session的缓存到redis容器。
以下是整理的基本的redis入门相关指令,方便大家入门学习。
教程内容主要来源 “易百教程”: http://www.yiibai.com/redis/redis_environment.html
强烈给大家推荐“易百教程”,适合开发入门,地址:http://www.yiibai.com/
 
1.环境安装
    启动redis:redis-server;
    检查是否工作:redis-cli,输入ping;
 
2.redis配置,配置文件可在redis根目录redis.conf
    基本语法:CONFIG GET CONFIG_SETTING_NAME
    所有配置:CONFIG GET *;
 
3.数据类型
    字符串:SET name "yiibai";GET name;
    Hashes哈希值:HMSET user:1 username yiibai password 123;HGETALL user:1;
    List列表:lpush totorList redis;lpush totorList mongodb;lpush totorList rebitmq;
                    lrange totorList 0 10;
    Set集合:sadd totorList redis;sadd tutorList mongodb;sadd tutorList rebitmq;
                     smembers totorList;
    集合排序:zadd totorList 0 redis; zaddtutorList 0 mongodb;zaddtutorList 0 rebitmq;
 
4.redis 命令
    启动redis客户端:redis-cli;
    远程服务器运行命令:redis-cli -h  host -p  port -a  passowrd
 
5.keys 管理键
    语法:COMMAND KEYNAME;
    删除键:DEL key;
    判断键:EXISTS KEY;
    查找键:KEYS pattern;
    键的数据值:TYPE key;
 
6.发布订阅
    待定
 
7.事务
    启动,事务开始:MULTI;
    执行:EXEC;
8.脚本,支持Lua解析器用于计算脚本,2.6.0开始内置
    命令:EVAL script numkeys key ... arg ...
9.redis连接
    验证是否与redis服务器连接:AUTH "password";ping; (输出pong)
    关闭连接:QUIT;
    更改当前连接所选数据库:SELECT index;
 
10.redis服务器
    服务器的统计数据和信息:INFO;
    kill客户端连接:CLIENT KILL [ip,port];
    连接列表:CLIENT LIST;
11.Redis备份
    备份,创建dump.rdb在Redis目录:SAVE;
    还原:CONFIG get dir;
    后台自动备份:BGSAVE;
12.redis安全,客户端身份验证,确保redis配置文件密码一致
    获取密码:CONFIG get requirepass;
    设置密码:CONFIG set requestpass "yiibai";
    AUTH验证:AUTH password;
 
13.Redis基准
    语法:redis-benchmark [option] [option value];
    例子:redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q
 
14.客户端连接
    客户端最大数量:config get maxclients;
    服务器最大连接设置:redis-server --maxclients 100000;
 
15.管道传输,批量执行命令,提高响应;
 
16.分区,数据分成多个redis,每个实例包含关键字的子集
 
17.java连接操作
    jedis.jar;
 
 
扩展:
同步和异步:关注的是消息通信机制
同步:就是在发出一个"调用"时,在没有得到结果之前,该"调用"就不返回;
异步:由"调用者"主动等待这个"调用"的结果;
例子:
    你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",
然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后
查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。
 
阻塞和非阻塞:程序在等待调用结果(消息,返回值)时的状态.
阻塞:调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回
非阻塞:指在不能立刻得到结果之前,该调用不会阻塞当前线程
例子:
    你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,
直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 
当然你也要偶尔过几分钟check一下老板有没有返回结果。
在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。
关于redis单线程的设计优势
1)绝大部分请求是纯粹的内存操作(非常快速)
2)采用单线程,避免了不必要的上下文切换和竞争条件
3)非阻塞IO 
内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间
4)单线程有时候比多线程更快,入需要考虑的并发、锁,也不会增加上下文切换代码更加简洁,集中处理问题;
个人见解:多核架构下,我还是看好多线程模型,但Redis的持久化、快照以及丰富的数据结构和运算功能更加强大一些。但Redis的持久化、快照以及丰富的数据结构和运算功能更加强大一些。
参考redis单线架构的解释:http://www.zhihu.com/question/19764056

猜你喜欢

转载自zhongmin2012.iteye.com/blog/2300167