通用命令:
type key # 获取key的类型
String类型常用命令:
set:
set key value # 插入key-value对
setnx key value # 若key不存在则插入键值对;若key已经存在,则不插入键值对,返回0。nx:not exist
setex key 有效期 value # 插入键值对并设置有效期(单位为秒)
mset key1 value1 key2 value2 # 批量插入键值对,结果只有两种:全部成功并返回ok或全部失败并返回0
msetnx key1 value1 key2 value2 # 批量插入键值对,结果只有两种:全部成功并返回ok或全部失败并返回0,如果key1或key2已经存在,则插入全部失败。
expire key n # 设置key对应的键值对的过期时间为n秒
rename key1 key2 # 将key1重命名为key2
del key # 删除key对应的键值对
persist key # 删除key的过期时间,使key对应的键值对永久存储。
get:
get key # 获取key对应的value
getset key value # 设置key对应的新值,并返回key对应的旧值
mget key1 key2 # 批量获取多个key对应的值
key pattern # 获取匹配pattern的所有key对应的值
strlen key # 获取key对应的value的长度
exists key # 验证key对应的键值对是否存在:1表示存在,0表示不存在
ttl key # 获取key对应的键值对剩余的生存时间(单位为秒),ttl返回值:正数表示剩余生存时间,-1表示没有过期时间,永久存储,-2表示数据已经被删除。
其它:
incr key # 对key对应的value进行+1操作,若key不存在,则会将key对应的value设为1,并存储该键值对。若key对应的value的类型不是int类型,则会返回错误。
incrby key n # 对key对应的value进行+n操作,如果key不存在,则会将key对应的value设为n,并储存该键值对。
decr key # 对key对应的value进行-1操作,如果key不存在,则会讲key对应的value设为-1,并存储该键值对。
decrby key n # 等价于incrby key -n
append key appendStr # 把appendStr追加到key对应的value的后面
setrange key 下标 替换的字符串
# 替换指定key对应的value从指定下标至最后的值
getrange key startIndex endIndex
# 获取指定key对应的value的子串(包含startIndex和endIndex)
# 字符串左面下标是从0开始的, eg:获取前3个字符 getrange key 0 2
# 字符串右边下标是从-1开始的, eg:获取最后3个字符 getrange key -3 -1
list(链表)类型常用命令:
概念:list(链表)类型:每个子元素都是String类型的双向链表
push:
lpush key value # 在名称为key的链表 头部(l表示left)添加字符串元素value
rpush key value # 在名称为key的链表 尾部(r表示right)添加字符串元素value
lpush key value1 value2 value3 # 在名称为key的链表 头部(l表示left)添加字符串元素value1、字符串元素value2、字符串元素value3
pop:
lpop key # 在名称为key的链表 头部(l表示left)删除一个元素,并返回删除元素。如果链表key不存在或者为空,则立即返回null。
rpop key # 在名称为key的链表 尾部(r表示right)删除一个元素,并返回删除元素,如果链表key不存在或者为空,则立即返回null。
blpop key
brpop key
# 阻塞式(b表示block)的获取链表中的元素
# 优点:避免使用轮询的方式来判断队列(链表)中是否有任务存在。
rpoplpush key1 key2
# 从名称为key1的链表的尾部移除一个元素,并且将这个元素添加到名称为key2的链表的头部,并返回这个元素,整个操作是一个原子操作。
# 如果链表key1不存在,或者链表key1是一个空链表,则返回空。
其它:
llen key # 返回名称为key的链表的长度
lset key index value # 在名称为key的链表中,将(从左边开始)第index元素的值设为value,下标从0开始
lindex key index # 返回名称为key的链表的第index个元素
lrange key index1 index2 # 获取名称为key的链表中指定范围的元素
linsert key before elementValue value # 在名称为key的链表的elementValue元素之前添加字符串元素value
lrem key count value # 在名称为key的链表中,删除count个和value相同的元素,count>0时,按从头到尾的顺序删除,count=0时,删除全部。
ltrim key index1 index2 # 在名称为key的链表中,保留index1到index2范围内的数据
hash类型及操作
概念:redis中的hash是一个string类型的field和value的映射表。它的添加、删除操作都是O(1),hash特别适合于存储对象。
hset mapName key value # 往名称为mapName的map中添加key-value对,map如果不存在,则自动创建map。如果key-value对已存在,则更新。
hget mapName key # 获取map中指定key的value
hdel mapName key # 删除map中指定的key-value
hlen mapName # 获取map的大小
hgetall key # 获取map中所有的key-value对
set(集合)类型及操作:
概念:
sadd key value # 向名称为key的集合中添加字符串元素value
srem key value # 将名称为key的集合中的value元素删除
smembers key # 获取set中所有的元素
redis命令行下的客户端redis-cli:
参数:
redis-cli --help 查看参数的说明。
举例:
# 进入redis命令行,默认操作0号数据库
redis-3.2.8/bin/redis-cli -h 主机名 -p 端口号 -a 密码
# 进入redis命令行,并指定操作的数据库
redis-3.2.8/bin/redis-cli -h 主机名 -p 端口号 -a 密码 -n 1
# 进入redis命令行并且执行redis的命令
redis-3.2.8/bin/redis-cli -h 主机名 -p 端口号 -a 密码 -n 1 get myStringKey
redis运维相关命令:
ping命令
# 判断与服务端的链接是否正常
info命令:
info
# 等价于info default,查看服务器的信息
info all
# 查看服务器的所有信息
info server
# 服务器信息
redis_version:3.2.8
executable:/home/jxn/local/bin/./redis-server
config_file:/home/jxn/local/conf/redis.conf
tcp_port:8800
redis_mode:standalone
process_id:6666
multiplexing_api:epoll
info cluster
# 集群信息
info memory
# 内存信息
info persistence
# 持久化信息
info clients
# 客户端连接信息,connected_clients表示已连接的客户端数量
info commandstats
# 命令统计信息,包括:命令的调用次数calls、命令总共耗费CPU时间usec、每个命令平均耗费的CPU时间usec_per_call
# 举例:cmdstat_get:calls=10,usec=24,usec_per_call=2.40
info keyspace
# 数据库中key的统计信息,包括:key的数量等
info replication
# 主从信息
info Sentinel
# 如果该server是一个哨兵,则显示该哨兵的信息。
# master0:name=redis1,status=ok,address=127.0.0.1:8800,slaves=3,sentinels=3
config命令:
config get *
# 获取redis服务的配置参数
config get timeout
# 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
config get maxclients
# 查看服务器设置的最大连接数
总之一句话:config get一下,redis配置都知道
client命令:
client list
# 查看所有连接到服务器的客户端信息
属性列表:
addr 客户端的地址和端口
fd 套接字所使用的文件描述符
age 以秒计算的已连接时长
idle 以秒计算的空闲时长
flags 客户端 flag
db 该客户端正在使用的数据库 ID
sub 已订阅频道的数量
psub 已订阅模式的数量
multi 在事务中被执行的命令数量
qbuf 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)
qbuf-free 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)
obl 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)
oll 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)
omem 输出缓冲区和输出列表占用的内存总量
events 文件描述符事件
cmd 最近一次执行的命令
sentinel命令:
sentinel masters
# 查看master的状态。
sentinel slaves masterName
# 查看该master的slave信息
sentinel set masterName key value
# 设置
SENTINEL failover masterName
# 强制执行一次故障转移。高优先级的slave将会被提升为master。
# Force a failover as if the master was not reachable, and without asking for agreement to other Sentinels (however a new version of the configuration will be published so that the other Sentinels will update their configurations)
monitor命令:
临时抓取redis中的操作:
# 抓取一定的数据后,kill掉进程。
redis-3.2.8/bin/redis-cli -h 主机名 -p 端口号 -a 密码 monitor > ./temp_monitor.log
记录redis的操作日志:
# 使用crontab来定时执行脚本:
ps aux | grep redis-cli | grep monitor | grep -v grep | awk '{print $2}' | xargs kill
redis-3.2.8/bin/redis-cli -h 主机名 -p 端口号 -a 密码 monitor > ./$(date +%F)_monitor.log
slowlog命令:
slowlog len
# 慢日志的数量
slowlog get n
# 获取前n条慢日志
slowlog日志内容:
1) 1) (integer) 67 # slowlog唯一编号id
2) (integer) 1558944860 # 查询的时间戳
3) (integer) 12277 # 查询的耗时(微妙
4) 1) "scan" # 查询命令
2) "102759"
3) "MATCH"
4) "*"
5) "COUNT"
6) "10000"
redis性能测试:
工具:redis-3.2.8/bin/redis-benchmark
说明:可以测试set/get/lpush/lpop/hset/...等操作的性能
使用:redis-benchmark --help
参数:
-c <clients> Number of parallel connections (default 50)
-n <requests> Total number of requests (default 100000)
-d <size> Data size of SET/GET value in bytes (default 3)
-q Quiet. Just show query/sec values
-t <tests> Only run the comma separated list of tests. The test names are the same as the ones produced as output.
--csv Output in CSV format
举例:
redis-benchmark -h 127.0.0.1 -p 6379 -c 20 -n 100000
# 测试 20个并发连接,10w个请求时redis各操作的性能。
redis-benchmark -h 127.0.0.1 -p 6379 -c 20 -q -d 10
# 测试存取大小为10字节数据的性能,只展示query/sec简单信息。
redis-benchmark -h 127.0.0.1 -p 6379 -c 20 -t set,lpush -n 100000 -q
# 只测试set,lpush操作的性能。
redis-benchmark -h 127.0.0.1 -p 6379 -c 20 -n 100000 -q script load "redis.call('set','foo','bar')"
# 只测试指定数值存取的性能。
redis操作命令:
# 打开一个客户端,注意:如果是连接哨兵,则ip和端口为哨兵的ip和端口。
redis-3.2.8/bin/redis-cli -h $(hostname) -p 8800 -a 'mypassword'
redis配置文件:redis.conf
# 设置slave的priority,priority的值越小,优先级越高,0表示禁止将该slave提升为master。
#
# The slave priority is an integer number published by Redis in the INFO output.
# It is used by Redis Sentinel in order to select a slave to promote into a master if the master is no longer working correctly.
#
# A slave with a low priority number is considered better for promotion,
# so for instance if there are three slaves with priority 10, 100, 25 Sentinel will pick the one with priority 10, that is the lowest.
#
# However a special priority of 0 marks the slave as not able to perform the role of master, so a slave with priority of 0 will never be selected by Redis Sentinel for promotion.
#
# By default the priority is 100.
slave-priority 100
redis-stat监控工具:
安装&说明:https://github.com/junegunn/redis-stat
启动命令:nohup java -jar redis-stat-0.4.14.jar redis机器ip1:redis端口号1 redis机器ip2:redis端口号2 -a redis密码 --verbose --server=web页面端口号 --csv=/data/redis-stat/output.csv &
结果显示:http://localshot:web页面端口号
redis常见的命令
于 2017-06-18 23:47:33 首次发布