Redis经常使用命令集redis
一、Redis经常使用命令集 1)链接操做命令 quit:关闭链接(connection) auth:简单密码认证 help cmd: 查看cmd帮助,例如:help quit 2)持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsave:返回上次成功将数据保存到磁盘的Unix时戳 shutdown:将数据同步保存到磁盘,而后关闭服务(慎用,必需要在开启持久化的前提下操做才有效) 3)远程服务控制 info:提供服务器的信息和统计 monitor:实时转储收到的请求 slaveof:改变复制策略设置 config:在运行时配置Redis服务器 config resetstat:重置info命令中的某些统计数据 config get:获取配置文件信息 config set:动态地调整 Redis 服务器的配置(configuration)而无须重启,能够修改的配置参数可使用命令 CONFIG GET * 来列出 config rewrite:Redis 服务器时所指定的 redis.conf 文件进行改写 psubscribe:订阅一个或多个符合给定模式的频道 例如psubscribe news.* tweet.* publish:将信息 message 发送到指定的频道 channel 例如publish msg "good morning" pubsub channels:列出当前的活跃频道 例如PUBSUB CHANNELS news.i* pubsub numsub:返回给定频道的订阅者数量 例如PUBSUB NUMSUB news.it news.internet news.sport news.music pubsub numpat:返回客户端订阅的全部模式的数量总和 punsubscribe:指示客户端退订全部给定模式。 subscribe:订阅给定的一个或多个频道的信息。例如 subscribe msg chat_room unsubscribe:指示客户端退订给定的频道。 4)对value操做的命令 exists(key):确认一个key是否存在 del(key):删除一个key type(key):返回值的类型 keys(pattern):返回知足给定pattern的全部key randomkey:随机返回key空间的一个 keyrename(oldname, newname):重命名key dbsize:返回当前数据库中key的数目 expire:设定一个key的活动时间(s) ttl:得到一个key的活动时间 select(index):按索引查询 move(key, dbindex):移动当前数据库中的key到dbindex数据库 flushdb:删除当前选择数据库中的全部key flushall:删除全部数据库中的全部key 5)String set(key, value):给数据库中名称为key的string赋予值value get(key):返回数据库中名称为key的string的value getset(key, value):给名称为key的string赋予上一次的value mget(key1, key2,…, key N):返回库中多个string的value setnx(key, value):添加string,名称为key,值为value setex(key, time, value):向库中添加string,设定过时时间time mset(key N, value N):批量设置多个string的值 msetnx(key N, value N):若是全部名称为key i的string都不存在 incr(key):名称为key的string增1操做 incrby(key, integer):名称为key的string增长integer decr(key):名称为key的string减1操做 decrby(key, integer):名称为key的string减小integer append(key, value):名称为key的string的值附加value substr(key, start, end):返回名称为key的string的value的子串 6)List rpush(key, value):在名称为key的list尾添加一个值为value的元素 lpush(key, value):在名称为key的list头添加一个值为value的 元素 llen(key):返回名称为key的list的长度 lrange(key, start, end):返回名称为key的list中start至end之间的元素 ltrim(key, start, end):截取名称为key的list lindex(key, index):返回名称为key的list中index位置的元素 lset(key, index, value):给名称为key的list中index位置的元素赋值 lrem(key, count, value):删除count个key的list中值为value的元素 lpop(key):返回并删除名称为key的list中的首元素 rpop(key):返回并删除名称为key的list中的尾元素 blpop(key1, key2,… key N, timeout):lpop命令的block版本。 brpop(key1, key2,… key N, timeout):rpop的block版本。 rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部 7)Set sadd(key, member):向名称为key的set中添加元素member srem(key, member) :删除名称为key的set中的元素member spop(key) :随机返回并删除名称为key的set中一个元素 smove(srckey, dstkey, member) :移到集合元素 scard(key) :返回名称为key的set的基数 sismember(key, member) :member是不是名称为key的set的元素 sinter(key1, key2,…key N) :求交集 sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合 sunion(key1, (keys)) :求并集 sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合 sdiff(key1, (keys)) :求差集 sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合 smembers(key) :返回名称为key的set的全部元素 srandmember(key) :随机返回名称为key的set的一个元素 8)Hash hset(key, field, value):向名称为key的hash中添加元素field hget(key, field):返回名称为key的hash中field对应的value hmget(key, (fields)):返回名称为key的hash中field i对应的value hmset(key, (fields)):向名称为key的hash中添加元素field hincrby(key, field, integer):将名称为key的hash中field的value增长integer hexists(key, field):名称为key的hash中是否存在键为field的域 hdel(key, field):删除名称为key的hash中键为field的域 hlen(key):返回名称为key的hash中元素个数 hkeys(key):返回名称为key的hash中全部键 hvals(key):返回名称为key的hash中全部键对应的value hgetall(key):返回名称为key的hash中全部的键(field)及其对应的value
二、redis-benchmark相关算法
redis-benchmark-h localhost -p 6379 -c 100 -n 100000 100个并发链接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 ./redis-benchmark -n 100000 –c 50 ====== –c 50 ====== 100000 requests completed in 1.93 seconds (100000个请求完成于 1.93 秒 ) 50 parallel clients (每一个请求有50个并发客户端) 3 bytes payload (每次写入3字节) keep alive: 1 (保持1个链接) 58.50% <= 0 milliseconds 99.17% <= 1 milliseconds 99.58% <= 2 milliseconds 99.85% <= 3 milliseconds 99.90% <= 6 milliseconds 100.00% <= 9 milliseconds (全部请求在62毫秒内完成) 114293.71 requests per second(每秒 114293.71 次查询) redis-benchmark参数 -h 设置检测主机IP地址,默认为127.0.0.1 -p 设置检测主机的端口号,默认为6379 -s<socket> 服务器套接字(压倒主机和端口) -c 并发链接数 -n 请求数 -d 测试使用的数据集的大小/字节的值(默认3字节) -k 1:表示保持链接(默认值)0:从新链接 -r SET/GET/INCR方法使用随机数插入数值,设置10则插入值为rand:000000000000 - rand:000000000009 -P 默认为1(无管道),当网络延迟过长时,使用管道方式通讯(请求和响应打包发送接收) -q 简约信息模式,只显示查询和秒值等基本信息。 --csv 以CSV格式输出信息 -l 无线循环插入测试数据,ctrl+c中止 -t<tests> 只运行<tests>测试逗号分隔的列表命令,如:-t ping,set,get -I 空闲模式。当即打开50个空闲链接和等待。 例子: $ redis-benchmark基本测试 $ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20 $ redis-benchmark -t set -n 1000000 -r 100000000 $ redis-benchmark -t ping,set,get -n 100000 –csv $ redis-benchmark -r 10000 -n 10000 lpush mylist ele:rand:000000000000
3.redis-server数据库
Redis服务器的daemon启动程序 redis-server 启动并加装默认配置文件[/path/to/redis.conf] redis-server /biran/conf/redis.conf启动并加装指定配置文件 redis-server - (read config from stdin) 使用标准输入读取配置为启动参数 redis-server --test-memory 256 检测256MB内存 redis-server –version 查版本号 redis-server /etc/sentinel.conf --sentinel 启动sentinel
4.redis-cli服务器
Redis命令行操做工具。固然,你也能够用telnet根据其纯文本协议来操做 可输入redis-cli直接进入命令行操做界面。 redis-cli参数 -h 设置检测主机IP地址,默认为127.0.0.1 -p 设置检测主机的端口号,默认为6379 -s<socket> 服务器套接字(压倒主机和端口) -a 链接到Master服务器时使用的密码 -r 执行指定的N次命令 -i 执行命令后等待N秒,如–i 0.1 info(执行后等0.1秒) -n 指定链接N号ID数据库,如–n 3(链接3号数据库) -x 从控制台输入的信息中读取最后一个参数 -d 定义多个定界符为默认输出格式(默认: \n) --raw 使用原数据格式返回输出内容 --latency 进入一个不断延时采样的特殊模式 --latency-history --latency-dist --latency、--latency-history、--latency-dist。它们可检测网络延迟,展示的形式不一样。 --slave 模拟一个从服务器到主服务器的命令显示反馈 --stat 可实时获取redis的重要统计信息。info命令虽然比较全,但这里可看到一些增长的数据,如requests(每秒请求数) --pipe 使用管道协议模式 --bigkeys 监听显示数据量大的key值,--bigkeys -i 0.1 --eval 用于执行lua脚本 --raw 和 --no-raw #--no-raw 要求返回原始格式。--raw 显示格式化的效果。 --help 显示命令行帮助信息 --version 显示版本号 例子: $ redis-cli进入命令行模式 $ redis-cli -r 3 info 重复执行info命令三次 $ cat testStr.txt | redis-cli -x set testStr读取testStr.txt文件全部内容设置为testStr的值 $ redis-cli -r 100 lpush mylist x $ redis-cli -r 100 -i 1 info | grep used_memory_human
5.获取服务器的信息和统计网络
redis-cli info查询系统信息。默认为localhost,端口为6379。 redis-cli -p 6379 info | grep '\<used_memory\>'过滤查询used_memory属性 当used_memory_rss接近maxmemory或者used_memory_peak超过maxmemory时,要加大maxmemory负责性能降低
6.redis TTL键值删除机制并发
1. 根据hz,按期执行删除动做。这部分就是你发的截图,目标是将要过时的key的百分比降到了25%如下。具体动做是: 1) 随机测试100个设置了过时时间的key 2) 删除全部发现的已过时的key 3) 若删除的key超过25个则重复步骤1 2. 可是根据上面的算法,有可能每次删除动做持续时间长,对系统负载太高。因此又来了个ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC(25),表示最多使用25%的cpu时间来执行删除动做。 而后根据:timelimit = 1000000*ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC/server.hz/100 算到了每次删除动做最长的执行时间
7.redis命令实例app
query在线分析 redis-cli MONITOR | head -n 5000 | ./redis-faina.py 监控正在请求执行的命令 在cli下执行monitor,生产环境慎用。 模拟oom redis-cli debug oom 模拟宕机 redis-cli debug segfault 模拟hang redis-cli -p 6379 DEBUG sleep 30 获取慢查询 SLOWLOG GET 10 结果为查询ID、发生时间、运行时长和原命令 默认10毫秒,默认只保留最后的128条。单线程的模型下,一个请求占掉10毫秒是件大事情,注意设置和显示的单位为微秒,注意这个时间是不包含网络延迟的。 slowlog get 获取慢查询日志 slowlog len 获取慢查询日志条数 slowlog reset 清空慢查询 配置: config set slow-log-slower-than 20000 config set slow-max-len 1000 config rewrite
redis-cli -h <ip> --stat redis自带监控命令dom
[root@localhost Desktop]# redis-cli -h 192.168.1.216 --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
27 1.24M 7 0 1198768 (+0) 2206
27 1.24M 7 0 1198769 (+1) 2206
27 1.24M 7 0 1198770 (+1) 2206
27 1.24M 7 0 1198771 (+1) 2206
27 1.24M 7 0 1198772 (+1) 2206
27 1.24M 7 0 1198773 (+1) 2206
27 1.24M 7 0 1198774 (+1) 2206
27 1.24M 7 0 1198775 (+1) 2206
27 1.24M 7 0 1198776 (+1) 2206
27 1.24M 7 0 1198777 (+1) 2206
27 1.24M 7 0 1198778 (+1) 2206
27 1.24M 7 0 1198779 (+1) 2206
27 1.24M 7 0 1198780 (+1) 2206
27 1.27M 7 0 1198782 (+2) 2206
27 1.24M 7 0 1198783 (+1) 2206
27 1.24M 7 0 1198784 (+1) 2206
27 1.24M 7 0 1198785 (+1) 2206 异步
redis-cli -h <ip> --slave 当前客户端模拟成当前redis节点的从节点,可用来获取当前redis节点的更新操做。合理利用可用于记录当前链接redis节点的一些更新操做,这些更新多是实开发业务时须要的数据。 redis-cli -h <ip> -r 5 -i 1 ping 每隔5秒(若是想用ms,如10ms则写0.01)执行一次命令,必须与-r一块儿使用。