您的位置:首页 > 数据库 > Redis

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来分析。可以采用定时抽样一段时间来做样本分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: