redis常用指令
2016-06-15 09:21
686 查看
1、Redis常用命令集
1)连接操作命令quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit
2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
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
2、Redis高级应用
1、安全性设置客户端连接后进行任何操作指定前需要密码,一个外部用户可以再一秒钟进行150W次访问,具体操作密码修改设置redis.conf里面的requirepass属性给予密码,当然我这里给的是primos
之后如果想操作可以采用登陆的时候就授权使用:
sudo /opt/java/redis/bin/redis-cli -a primos
或者是进入以后auth primos然后就可以随意操作了
2、主从复制
做这个操作的时候我准备了两个虚拟机,ip分别是192.168.15.128和192.168.15.133
通过主从复制可以允许多个slave server拥有和master server相同的数据库副本
具体配置是在slave上面配置slave
slaveof 192.168.15.128 6379
masterauth primos
如果没有主从同步那么就检查一下是不是防火墙的问题,我用的是ufw,设置一下sudo ufw allow 6379就可以了
这个时候可以通过info查看具体的情况
3、事务处理
redis对事务的支持还比较简单,redis只能保证一个client发起的事务中的命令可以连续执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务的上下文,连接后续命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。
比如我下面的一个例子
set age 100
multi
set age 10
set age 20
exec
get age --这个内容就应该是20
multi
set age 20
set age 10
exec
get age --这个时候的内容就成了10,充分体现了一下按照队列顺序执行的方式
discard 取消所有事务,也就是事务回滚
不过在redis事务执行有个别错误的时候,事务不会回滚,会把不错误的内容执行,错误的内容直接放弃,目前最新的是2.6.7也有这个问题的
乐观锁
watch key如果没watch的key有改动那么outdate的事务是不能执行的
4、持久化机制
redis是一个支持持久化的内存数据库
snapshotting快照方式,默认的存储方式,默认写入dump.rdb的二进制文件中,可以配置redis在n秒内如果超过m个key被修改过就自动做快照
append-only file aof方式,使用aof时候redis会将每一次的函 数都追加到文件中,当redis重启时会重新执行文件中的保存的写命
令在内存中。
5、发布订阅消息 sbusribe publish操作,其实就类似linux下面的消息发布
6、虚拟内存的使用
可以配置vm功能,保存路径,最大内存上线,页面多少,页面大小,最大工作线程
临时修改ip地址ifconfig eth0 192.168.15.129
常用命令:
1) 查看keys个数
keys * // 查看所有keys
keys prefix_* // 查看前缀为"prefix_"的所有keys
2) 清空数据库
flushdb // 清除当前数据库的所有keys
flushall // 清除所有数据库的所有keys
Redis常用命令
Redis常用命令(示例)
redis高级应用
Jedis接口分类说明
Redis新手入门详解(百度文库)
Redis中文入门手册(百度文库)
Redis 设计与实现(推荐)
3.redis其它命令
1.1 redis-benchmark
Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。redis的基准信息和性能检测。
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 | |
| |
1.2 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 查版本号
1.3 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 | 进入一个不断延时采样的特殊模式 |
--slave | 模拟一个从服务器到主服务器的命令显示反馈 |
--pipe | 使用管道协议模式 |
--bigkeys | 监听显示数据量大的key值,--bigkeys -i 0.1 |
--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 |
1.4 redis-check-aof
更新日志检查 ,加--fix参数为修复log文件redis-check-aofappendonly.aof
1.5 redis-check-dump
检查本地数据库文件redis-check-dump dump.rdb
1.6 查看、删除key信息
redis-clikeys \* #查看所有键值信息redis-cli-n 1 keys "test*" | xargs redis-cli -n 1 del 删除DBID为1的test开头的key值
1.7 获取服务器的信息和统计
redis-cli info查询系统信息。默认为localhost,端口为6379。redis-cli -p 6379 info | grep '\<used_memory\>'过滤查询used_memory属性
当used_memory_rss接近maxmemory或者used_memory_peak超过maxmemory时,要加大maxmemory负责性能下降
redis服务的统计信息:
redis_version:2.4.14 | Redis版本号 |
redis_git_sha1:00000000 | |
redis_git_dirty:0 | Git版本?? |
arch_bits:64 | 64位系统 |
multiplexing_api:epoll | |
gcc_version:4.1.2 | gcc版本号 |
process_id:5551 | 当前服务器进程id |
uptime_in_seconds:1538 | 正常工作时间(秒) |
uptime_in_days:0 | 正常工作天数 |
lru_clock:1975799 | |
used_cpu_sys:0.04 | Cpu使用率 |
used_cpu_user:0.09 | |
used_cpu_sys_children:0.01 | |
used_cpu_user_children:0.04 | |
connected_clients:2 | 客户端连接数 |
connected_slaves:0 | 从服务器连接数 |
client_longest_output_list:0 | |
client_biggest_input_buf:0 | |
blocked_clients:0 | 锁定的客户端 |
used_memory:3765272 | redis数据占用的内存,单位bytes(字节) |
used_memory_human:3.59M | 重点关注! |
used_memory_rss:4665344 | redis占用的物理内存 |
used_memory_peak:3756712 | redis使用物理内存的峰值 |
used_memory_peak_human:3.58M | |
mem_fragmentation_ratio:1.24 | 内存碎片率 |
mem_allocator:jemalloc-2.2.5 | 内存分配器版本 |
loading:0 | |
aof_enabled:0 | 是否开启纯累加模式 |
changes_since_last_save:0 | |
bgsave_in_progress:0 | 后台异步保存数据的进程数 |
last_save_time:1340962658 | |
bgrewriteaof_in_progress:0 | 异步重写 AOF 文件以反应当前数据库的状态的进程数 |
total_connections_received:3 | 接受到的总连接数 |
total_commands_processed:10156 | 服务器处理的命令数量 |
expired_keys:0 | 失效key的总数量 |
evicted_keys:0 | 已删除的key的总数量 |
keyspace_hits:0 | Key命中次数 |
keyspace_misses:0 | Key未命中次数 |
pubsub_channels:0 | 订阅信息 |
pubsub_patterns:0 | |
latest_fork_usec:579 | 最近子进程 |
vm_enabled:0 | 是否使用虚拟内存0:不使用,1:使用 |
role:slave | master为主服务器slave为从服务器 |
master_host:127.0.0.1 | 连接主服务器IP |
master_port:6379 | 连接主服务器端口号 |
master_link_status:up | |
master_last_io_seconds_ago:2 | 距离最后一次的连接时间 |
master_sync_in_progress:0 | 同步主服务器进程数 |
db0:keys=3,expires=0 | 1号数据库保存的key数量,及超时时间 |
db1:keys=1,expires=0 | 2号数据库保存的key数量,及超时时间 |
1.8 Redis的query分析
redis-faina(https://github.com/Instagram/redis-faina)是由Instagram开发并开源的一个Redis查询分析小工具,需安装python环境。redis-faina 是通过Redis的MONITOR命令来实现的,通过对在Redis上执行的query进行监控,统计出一段时间的query特性,需root权限。
通过管道从stdin读取N条命令,直接分析
redis-cli -p 6439 monitor | head -n <NUMBER OF LINES TO ANALYZE>| ./redis-faina.py
从一个文件中读取117773条命令,再分析
redis-cli -p 6439 monitor | head -n 117773 > /tmp/outfile.txt
./redis-faina.py /tmp/outfile.txt
其输出结果如下:
Overall Stats
========================================
Lines Processed 117773
Commands/Sec 11483.44
Top Prefixes(按key前缀统计)
========================================
friendlist 69945
followedbycounter 25419
followingcounter 10139
recentcomments 3276
queued 7
Top Keys(操作最频繁的key)
========================================
friendlist:zzz:1:2 534
followingcount:zzz 227
friendlist:zxz:1:2 167
friendlist:xzz:1:2 165
friendlist:yzz:1:2 160
friendlist:gzz:1:2 160
friendlist:zdz:1:2 160
friendlist:zpz:1:2 156
Top Commands(执行最多的命令)
========================================
SISMEMBER 59545
HGET 27681
HINCRBY 9413
SMEMBERS 9254
MULTI 3520
EXEC 3520
LPUSH 1620
EXPIRE 1598
Command Time (microsecs)(命令执行时长)
========================================
Median 78.25
75% 105.0
90% 187.25
99% 411.0
Heaviest Commands (microsecs)(耗时最多的命令)
========================================
SISMEMBER 5331651.0
HGET 2618868.0
HINCRBY 961192.5
SMEMBERS 856817.5
MULTI 311339.5
SADD 54900.75
SREM 40771.25
EXEC 28678.5
Slowest Calls(最慢的命令)
========================================
3490.75 "SMEMBERS""friendlist:zzz:1:2"
2362.0 "SMEMBERS""friendlist:xzz:1:3"
2061.0 "SMEMBERS""friendlist:zpz:1:2"
1961.0 "SMEMBERS" "friendlist:yzz:1:2"
1947.5 "SMEMBERS""friendlist:zpz:1:2"
1459.0 "SISMEMBER""friendlist:hzz:1:2" "zzz"
1416.25 "SMEMBERS""friendlist:zhz:1:2"
1389.75 "SISMEMBER""friendlist:zzx:1:2" "zzz"
从上面结果我们可以看到对Redis的操作规律,比如针对哪些key在进行操作,进行了什么操作,这些操作的效率如何等相关有用信息。
由于Redis的MONITOR 也对性能有所影响,所以建议在使用时不要一直开启MONITOR来分析。可以采用定时抽样一段时间来做样本分析。
相关文章推荐
- Redis3.0 配置文件说明
- redis更新日志中文版2.4-2.6
- redis 安装
- Redis各种数据类型操作
- 超强、超详细Redis数据库入门教程
- java使用redis入门学习--Jedis
- Redis 数据类型及其特点
- centos redis
- redis集群设置密码
- Redis学习二
- redis指定redis.conf启动的方法。
- redis做简单的数据持久化的方法。
- ubuntu下安装redis
- 配置哨兵监控Redis运行情况
- redis 配置密码
- 超强、超详细Redis数据库入门教程[atco整理]
- redis安装教程。
- redis3.0.6 集群搭建
- Redis持久化-数据丢失及解决(转载)
- ASP.NET Redis 开发(转载)