欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

redis 基础 入门 博客分类: redis redis命令缓存nosql集群session 

程序员文章站 2024-03-18 14:06:04
...
学习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