Redis入门高级部分
Redis:
- redis集群查询
- redis批量删除
- redis数据备份和恢复
- redis安全
- redis性能测试
Redis 客户端连接
- redis管道技术
- redis分区
- java操作redis
redis集群查询
>cluster info
>cluster nodes
>info replication
redis批量删除
redis的del因为不支持模糊删除,因此一般只能一个一个删除
批量删除使用Linux中的管道和xargs参数:
>redis-cli -h 192.168.68.187 -p 6379 -n 0 keys "myTest*" | xargs redis-cli -h 192.168.68.187 -p 6379 -n 0 del //如果是本地则无需-h -p,-n表示分区,默认为0可以不写
因keys命令会造成redis线程阻塞,在大批量数据时,性能会下降,因此使用scan较好
>redis-cli scan 0 MATCH "mytest" COUNT 100 | xargs redis-cli del
Redis 数据备份与恢复
数据库备份
采用save命令,创建当前数据库的备份,执行后会生成一个dump.rdb文件。这个文件就是数据库的备份文件。
>save
或者使用
>bgsave //后台静默保存
保存文件地址查看:
>config get dir
数据库恢复
将保存的dump.rdb文件拷贝到目标Redis的文件路径下,重启Redis即恢复数据。
Redis 安全
redis中设置config的requirepass密码即可。
- 127.0.0.1:6380> config get requirepass
- 1) "requirepass"
- 2) "dennyzhao"
- 127.0.0.1:6380> config set requirepass denny
- OK
- 127.0.0.1:6380>
Redis 性能测试
redis通过内部测试工具redis-benchmark来检测Redis的性能。
- C:\Users\zhaoq>redis-benchmark -h 127.0.0.1 -p 6380 -a denny -n 10000 -q
- PING_INLINE: 76923.08 requests per second
- PING_BULK: 73529.41 requests per second
- SET: 62893.08 requests per second
- GET: 57803.47 requests per second
- INCR: 75757.58 requests per second
- LPUSH: 63694.27 requests per second
- RPUSH: 54054.05 requests per second
- LPOP: 45454.55 requests per second
- RPOP: 38610.04 requests per second
- SADD: 76923.08 requests per second
- SPOP: 66225.17 requests per second
- LPUSH (needed to benchmark LRANGE): 52910.05 requests per second
- LRANGE_100 (first 100 elements): 25974.03 requests per second
- LRANGE_300 (first 300 elements): 12903.23 requests per second
- LRANGE_500 (first 450 elements): 9852.22 requests per second
- LRANGE_600 (first 600 elements): 8058.02 requests per second
- MSET (10 keys): 60240.96 requests per second
其中 -n 10000 -q 表示模拟1万笔数据发起请求进行测试。
具体参数说明详见http://www.runoob.com/redis/redis-benchmarks.html
Redis 客户端连接
redis服务端通过监听tcp端口来接收客户端的连接,监听后会将客户端的socket设置为非阻塞状态,方便随时进行数据通信。
同时建立一份可读文件来监听客户端的数据传送情况。
最大客户端连接数:
- C:\Users\zhaoq>redis-cli -h 127.0.0.1 -p 6380 -a denny
127.0.0.1:6380> config get maxclient- (empty list or set)
- 127.0.0.1:6380> config get m*
- 1) "masterauth"
- 2) ""
- 3) "maxmemory"
- 4) "0"
- 5) "maxmemory-samples"
- 6) "5"
- 7) "maxclients"
- 8) "10000"
- 9) "min-slaves-to-write"
- 10) "0"
- 11) "min-slaves-max-lag"
- 12) "10"
- 13) "maxmemory-policy"
- 14) "noeviction"
- 127.0.0.1:6380> config get maxclients
- 1) "maxclients"
- 2) "10000"
- 127.0.0.1:6380>
客户端相关命令:
设定客户端名称方便查找
- 127.0.0.1:6380> client getname
- (nil)
- 127.0.0.1:6380> client setname myTest1
- OK
- 127.0.0.1:6380> client getname
- "myTest1"
- 127.0.0.1:6380> client list
- id=853 addr=127.0.0.1:59978 fd=33 name=myTest1 age=203 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=18446744073709537584 events=r cmd=client
- 127.0.0.1:6380> client pause
- (error) ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)
- 127.0.0.1:6380>
Redis 管道技术
redis采用tcp协议,即无状态保存协议,客户端发起请求,监听socket返回,一次访问回应结束。在socket未返回回应之前,通道属于阻塞状态,这样大大影响了大数据并发写入。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。提高高并发数据写入的速度。
有点像事务处理,但事务处理将所有命令放置在一起,然后统一去执行。
而管道技术是将每个命令去执行,先不管返回,最后统一回收。
- 127.0.0.1:6380> multi
- OK
- 127.0.0.1:6380> set id 5526
- QUEUED
- 127.0.0.1:6380> incr id
- QUEUED
- 127.0.0.1:6380> incr id
- QUEUED
- 127.0.0.1:6380> incr id
- QUEUED
- 127.0.0.1:6380> incr id
- QUEUED
- 127.0.0.1:6380> exec
- 1) OK
- 2) (integer) 5527
- 3) (integer) 5528
- 4) (integer) 5529
- 5) (integer) 5530
- 127.0.0.1:6380>
一般通过程序控制来实现。
- /**
- * 管道技术应用
- */
- Pipeline pip = jedis.pipelined();
- for(int i=0;i < 20;i++) {
- //pip.set("name" + i, "张三" + i);
- pip.get("name" + i);
- }
- //执行并读取
- for(Object obj : pip.syncAndReturnAll()) {
- System.out.println(obj.toString());
- };
Redis 分区
分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。
Java操作Redis
java操作redis使用jedis.jar 作为驱动。如同ojdbc.jar对应oracle一样。
基础使用:
- private final static String R_HOST="127.0.0.1";
- private final static String R_AUTO = "denny";
- private final static int R_PORT = 6380;
- public static void main(String[] args) {
- // 创建客户端连接
- Jedis jedis = new Jedis(R_HOST, R_PORT);
- jedis.auth(R_AUTO);
- System.out.println(jedis.exists("username"));
- jedis.set("username", "佟湘玉");
- System.out.println(jedis.get("username"));
- System.out.println(jedis.get("users"));
- }
Redis入门高级部分的更多相关文章
- Redis入门指南
随着互联网业务对性能需求日益强烈,作为Key/Value存储的Redis具有数据类型丰富和性能表现优异的特点.如果能够熟练地驾驭它,不管是把它用做缓存还是存储,对很多大型应用都很多帮助.新浪作为世界上 ...
- 【原】Redis入门教程
最近在学习Redis,写几篇文章记录一下学习过程:Redis入门教程. 1.Redis基本概念 Redis Redis Keys Redis 基本数据类型 Redis基本操作 遍历操作 Pub-Sub ...
- Redis入门教程(二)
推荐阅读: Redis入门教程(一)https://www.cnblogs.com/jichi/p/10285346.html 5. Redis 的数据结构 5.1 Redis 数据结构介绍 redi ...
- Redis入门指南之一(简介)
1. 简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同的场景下的缓存与存储需求.同时Redis的诸多高级功能使其可以胜任消息队列.任务队列等不同的 ...
- Redis入门及主从配置
1.Redis入门简介 Redis是一个开源的使用ANSI C语音编写.支持网络.可基于内存亦可持久化的日志型,Key-Value数据库.支持存储的value类型包括 string(字符串).list ...
- 超强、超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...
- 超强、超详细Redis入门教程
(1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的特点 Redis本质上是一个Key-Value类型的 ...
- 超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...
- Redis入门手册
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...
随机推荐
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
- 云计算的三种服务模式:IaaS,PaaS和SaaS
云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道. “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或 ...
- Shell IF条件判断解析
IF条件判断 1.基本语法: if [ command ]; then #符合该条件执行的语句 fi2.扩展语法: if [ command ];then #符合该条件执行的语句 elif [ com ...
- 利用NPOI导出数据到Execl
相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpCont ...
- ElasticSearch索引
简介 索引是具有相同结构的文档集合.在Elasticsearch中索引是个非常重要的内容,对Elasticsearch的大部分操作都是基于索引来完成的.同时索引可以类比关系型数据库Mysql中的数据库 ...
- Ambari集群的搭建(离线安装)
我们先克隆几台机器 我们打开克隆出来的机器 我们先把主机名修改一下 我们把主机名改成am2 下一步我们来配置网卡 把原来的eth0的注释掉,把现在的eth1改成eth0,同时把mac地址记下来 保存退 ...
- vs2015 引用lib库和dll
1.首先右键项目->属性 2.在项目中添加lib文件夹,把lib库放在文件夹下面,然后在图中的库目录引用当前路径的lib文件夹 3.在项目的路径下添加include中添加头文件,然后在常规中添加 ...
- Linux性能优化 第四章 性能工具:特定进程CPU
4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...
- RecyclerView中设置match_parent无效;
在RecyclerView中宽度设置了match_parent,但是效果和wrap_content一样: 说下解决方法: 1.这样子写,match_parent没有效果: View v = View. ...
- studio2.3app签名打包安装失败,找不到签名证书。
Androidstudio升级到2.3后,打包时和之前不一样了. 如果只选择V2,是未签名的.所以要把V1和V2都打勾.