一、redis功能介绍 1、慢查询分析:只记录命令执行时间,并不记录命令排队与网络传输时间。 1、redis.conf文件配置 slowlog-log-slower-than 10000 单位是微秒 slowlog-max-len 128 指定列表中最大保存慢查询条数。 2、pipeLine流水线概念 redis获取数据步骤:1发送命令 2命令排队 3命令执行 4返回结果。当机房与用户端距离太远,真正耗时则为数据往返时间PTT。 pipeLine机制将一组redis命令组装,通过一次RTT传输给redis服务,并顺序返回数据,节约n-1次RTT时间。 pipeLine组装redis是非原子性操作,而redis原生的mget mset等批量操作指令为原子性。 3、redis支持简单事物 mulit开启事物,exec事物提交,discard事物不提交,但是无法支持事物回滚。 但是lua脚本可以完美的支持redis事物,lua脚本为c语言。 4、redis对lua脚本支持 redis执行lua脚本的两种方式:eval与evalsha,如果lua脚本过大,可以执行redis-cli --eval。 lua脚本原子性,多个redis命令封装传送,减少网络传输耗时。 5、GEO对经纬度支持:GEO数据结构底层为zset 添加:geoadd key 经度 维度 成员 geoadd city:location 116 39 beijing 查询:geopos key 成员 用途:查询两个地里位置间距离,获取某经纬度范围内的城市列表。 二、redis客户端 1、协议 几乎所有主流编程语言java、Python、php等都是redis服务的客户端。 客户端与redis通讯协议TCP、redis制定了RESP协议(redis序列化协议)实现数据交互,这种协议简单高效。 2、java客户端 1、首先引入redis依赖,直连获取Jedis对象。 缺点:每次操作客户端都要通过TCP建立与redis服务连接。 2、使用优秀的redis连接池操作Jedis对象 3、java对Pipeline对象整合 4、java对lua脚本支持 注:script:lua脚本内容 keyCount:键个数 params:相关参数keys和argv 3、客户端管理 client list:列出与redis服务相连的所有客户端连接信息 info clients :获取最大输入、输出缓冲区。 client setname getname :设置、获取当前客户端名称 client kill ip:port 关闭客户端进程 monitor:监控操作该redis服务的client 4、java客户端常见异常 1、无法从连接池获取连接 原因:连接池最大连接数不够、连接没有正常释放、存在慢查询导致连接占满、在redis服务端导致命令阻塞。 2、客户端读写超时 原因:读写超时时间设置过段、命令执行过慢、客户端与服务端网络异常、redis自身阻塞 3、客户端连接超时 原因:连接超时时间设置过段、客户端与服务端网络异常、redis自身阻塞 4、客户端缓冲区异常 原因:输出缓冲区满普通客户端输出缓冲区设置1G、不正常并发读写Jedis对象被多个线程并发操作 5、lua脚本正在执行,超过lua-time-limit 6、redis正在加载持久化文件 7、redis使用内存超过maxmemory 8、客户端连接数过大超过maxclients