redis常用指令

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

服务器套接字(压倒主机和端口)

-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

只运行测试逗号分隔的列表命令,如:-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

服务器套接字(压倒主机和端口)

-a

连接到Master服务器时使用的密码

-r

执行指定的N次命令

-i

执行命令后等待N秒,如–i 0.1 info(执行后等0.1)

-n

指定连接NID数据库,如–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_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 | ./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来分析。可以采用定时抽样一段时间来做样本分析。

你可能感兴趣的:(Redis)