① 如何在linux中查询redis的数据
1、执行如图是命令,查看redis服务是否启动。
② Redis启动、停止、Redis命令行的操作
1.redis命令
1 redis执行了make install后,redis的课执行文件都会自动复制到 /usr/local/bin 目录
2 redis-server redis服务器
3 redis-cli redis命令行客户端
4 redis-benchmark redis性能测试工具
5 redis-check-aof aof文件修复工具6redis-check-mp rdb文件检查工具
2.停止 redis 命令
# 停止Redis命令
redis-cli shutdown
3.启动 redis 命令
(1). # 启动 redis-server
redis-server
(2). # 带配置文件启动
(3). # 带配置文件启动 且指定某几个配置 配置名称前加 --
会覆盖配置文件里面的值
回到顶部
4.redis命令行客户端
(1).发送命令
注意:框里面的是 6379 里面没有登录成功,下面改成了 1123 成功了,因为刚才上面改了端口
(2).命令返回值
状态回复:pong表示可用
错误回复:不知道这个什么命令
整数回复:多种命令会回复整数
下面的字符串回复,都是赋值了才有。
字符串回复:
多行字符串回复:
③ redis 命令执行过程
redis数据淘汰原理
redis过期数据删除策略
redis server事件模型
redis cluster mget 引发的讨论
redis 3.x windows 集群搭建
redis 命令执行过程
redis string底层数据结构
redis list底层数据结构
redis hash底层数据结构好闹
redis set底层数据结构
redis zset底层数据结构
redis 客户端管理
redis 主从同步-slave端
redis 主从同步-master端
redis 主从超时检测
redis aof持久化
redis rdb持久化
redis 数据恢复过程
redis TTL实现原理
redis cluster集群建立
redis cluster集群选主
这篇文章的目的是为了描述redis server在处理client命令的执行过程,大概包括流程图、源码、以及redis的命令格式说明,redis的通信协议参考自redis的则颂 官网 。
整个redis的server端命令执行过程就如下面这个流程图:
nread = read(fd, c->querybuf+qblen, readlen);负责读取命令数,通过processInputBuffer进行下一步处理。
核心在于processInlineBuffer处理内联命令,processMultibulkBuffer处理批量命令包括get/set等,核心的processCommand用于执行命令。
执行命令的过程其实主要是寻找命令对应的执行函数,通过lookupCommand查找对应的执行命令,通过call执行命令。
负责执行命令 c->cmd->proc 并更新统计信息,执行完成后负责同步数据 propagate 。
主要是负责同步数据到AOF文件和slave节点,feedAppendOnlyFile负责友盯罩同步到AOF文件,replicationFeedSlaves负责同步
AOF涉及的缓存有多份,包括
包含了命令和对应执行函数的映射关系,应该看上去很清晰命令。
协议的一般格式如下,注意前面的*或者$等字符,结尾的 是分隔符。
其中, 回复中的第二个元素为空。
④ redis 命令在redis中怎么执行的
首先肯定是打开一个控制台,在windows系统打开控制台的方式很多,我喜欢通过使用快捷方式“win+R”打开“运行”,输入“cmd”来打开控制台。
在控制台输入命令
redis-cli
这将打开一个Redis提示
127.0.0.1:6379>
表示已经链接上ip:127.0.0.1,端口:6379的Redis服务了
我们可以使用“PING”命令来检查Redis是否在工作,如下所示:
127.0.0.1:6379>
PING
PONG
127.0.0.1:6379>
表示Redis运行正常。
⑤ 记录一下redis常用运维命令
语法:[config get xxx]
例如:
同样的还有config set [属性] [属性值] ,给指定属性值设置参数。
列一下client list中对应的字段含义:
如果发现idle中对应的值比较高,说明redis的timeout属性设置有问题。结合config get timeout查看一下超时时间,如果timeout为0,说明已经禁用掉该功能,就有可能导致redis连接数不释放的问题。
Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和 CONFIG SET 命令对它们动态地进行修改。
第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。
比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:
CONFIG SET slowlog-log-slower-than 100
而以下命令记录所有查询时间大于 1000 微秒的查询:
CONFIG SET slowlog-log-slower-than 1000
另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超首大码过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。
以下命令让 slow log 最多保存 1000 条日志:
CONFIG SET slowlog-max-len 1000
使用 CONFIG GET 命令可以查询两个选项的当前值:
查看 slow log
要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数仿差量的日志。
最新的日志会最先被打印:
为测试需要,将 slowlog-log-slower-than 设成了 10 微秒
日志的唯一 id 只有在 Redis 服务器重启的时候才会重置,这样可以避免对日志的重复处理(比如你可能会想在每次发现新的慢查询时发邮件通知你)。
查看当前日志的数量
使用命令 SLOWLOG LEN 可以查看当前日志的数量。
请注意这个值和 slower-max-len 的区别,它们一个是当前日志的数量,一个是允许记录的最大日志的数量。
清空日志
使用命令 SLOWLOG RESET 可以清空 slow log 。
测试命者哪令事例:
1、redis-benchmark -h 192.168.1.201 -p 6379 -c 100 -n 100000
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能
2、redis-benchmark -h 192.168.1.201 -p 6379 -q -d 100
测试存取大小为100字节的数据包的性能
3、redis-benchmark -t set,lpush -n 100000 -q
只测试某些操作的性能
4、redis-benchmark -n 100000 -q script load "redis.call('set','foo','bar')"
只测试某些数值存取的性能
测试结果分析:
参考文档: http://www.cnblogs.com/silent2012/p/4514901.html
http://www.runoob.com/redis/server-client-list.html
http://dba10g.blog.51cto.com/764602/1846068
http://blog.csdn.net/cxhgg/article/details/67640263
⑥ shell 下执行redis相关操作
redis-cli + redis命令 执行相关redis操作,这种情况经常用在模糊访问key的场景。因为Redis keys命令支持模式匹配,其他命令不支持稿乎。
如有时候需要根据一定的模式来模糊删除key,但是del命令不支持模式匹配,
这时只能结合shell命令来完成了。
如
[root@localhost ~]#/usr/local/redis-2.6.14/src/键伍悉redis-cli get lifekey
"hello"
删除所有的键
[root@localhost src]# pwd
/usr/local/redis-2.6.14/src
[root@localhost src]# ./redis-cli keys"*" | xargs redis-cli del # 删除本地 redis
橘脊 删除远程redis上指定的模式匹配键
[root@localhost src]# ./redis-cli -h 10.255.209.34-p 16379 -n 11 keys "*:custid" | xargs ./redis-cli -h 10.255.209.34-p 16379 -n 11 del
(integer) 12
导出redis数据到本地文件
[root@localhost src]# ./redis-cli -h 10.255.209.34-p 16379 -n 11 --rdb backup.rdb
shad@�����.
⑦ Redis常用命令五
1、config get requirepass 获取当前Redis的连接密码
2、CONFIG GET dir 启动的redis路径
3、config set requirepass "123123" 设置当前Redis的连接密码
4、auth 123123 密码验证
5、save 立刻持久化数据到mp.rdb文件中 只管保存,其它不管,全部阻塞
6、bgsave Redis会在后台异步进行快照操作 可以通过lastsave 命令获取最后一次成功执行快照的时间
7、flushall 也会产生mp.rdb文件,但是里面是空的,无意义。
8、AOF 是以日志的形式记录每个 写 操作,AOF和RDB同时存在时,先使用AOF
9、redid-check-aof --fix append only.aof 修复AOF文件
⑧ Redis | Redis 字符串相关命令
Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 字符串 相关的命令,也就是关于 Strings 相关的命令,如下图。
上图中用红色圈中的部分,就是关于 字符串 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。
在按下回车后,可以看到相应分类命令的说明,如下图。
图中就是部分关于 Strings 相关的部分命令。
常用 Strings 相关命令
为了大家能够直接复制命令进行测试,下面我就不截图了。
1、set 命令
set 命令的作用是 设置一个 key 的 value 值
设置 key 对应的字符串类型
上面的命令分别对 key1 设置为 value1,对 key2 设置为 value2。
set 命令除了基本的用法外,还有几个参数,先来说一下 nx 和 xx 两个参数。
nx 表示 key 不存在时,执行操作
xx 表示 Key 存在时,执行操作
命令 set k1 v1 nx 表示,当 k1 不存在时,给 k1 设置字符串值为 v1,此时 k1 并不存在,因此该命令被执行;
命令 set k2 v2 xx 表示,当 k2 存在时,给 k2 设置字符串值为 v2,此时 k2 并不存在,因此该命令没有被执行
再介绍另外两个参数,分别是 ex 和 px,ex 和 px 是在进行 set 命令时可以设置过期时间的命令
ex 表示 设置的过期时间以秒为单位
px 表示 设置的过期时间以毫秒为单位
2、setnx 命令
setnx 命令的作用是 当指定的键不存在时给该键设置一个值
该命令类似 set 命令附带了 nx 参数
在上面的命令中,setnx k1 value1,由于 k1 存在,因此命令没有被执行,setnx k2 value2,由于 k2 不存在,因此命令被执行。
当命令执行成功,返回值为 1
当命令执行不成功,返回值为 0
3、get 命令
get 命令的作用是 获取指定 key 的值
该命令已经被多次使用了,演示如下:
4、getset 命令
getset 命令的作用是 设置一个 key 的 value,并获取设置前的值
该命令相当于 先对指定的 key 进行一次 get 操作,再执行一次 set 操作,两个命令合并,可以保证原子性。
5、mget 命令
mget 命令的作用是 一次获取多个 key 的值,如果 key 不存在则返回 nil
可以看到,key3 是不存在的,因此 key3 返回的值是 nil
6、mset 命令
mset 命令的作用是 设置多个key value
7、msetnx 命令
msetnx 命令的作用是 设置多个key value,仅当key不存在时
可以看出,msetnx k4 vv4 k5 vv5 时,此时不存在 k4 和 k5 因此该命令执行成功,在执行 msetnx k4 v4 k5 v5 k6 v6 时,由于 k4 和 k5 已经存在,则使得这条命令执行失败,因此 k4 和 k5 的值仍然是 vv4 和 vv5,并且没有 k6 这个 key。
8、incr 命令
incr 命令的作用是 执行原子加1操作
9、decr 命令
decr 命令的作用是 整数原子减1
10、incrby 命令
incrby 命令的作用是 执行原子增加一个整数
11、decrby 命令
decrby 命令的作用是 原子减指定的整数
12、incrbyfloat 命令
incrbyfloat 命令的作用是 执行原子增加一个浮点数
13、setrange 命令
setrange 命令的作用是 修改字符串指定偏移的值
字符串的偏移从 0 开始,hello 的长度为 5,最后 1 个下标为 4,当我们 setrange kstr 6 x 时,我们将 kstr 下标 6 的位置设置为了 x,因此在下标 5 的位置处给了一个 x00,即 ASCII 码的 0。
14、getrange 命令
getrange 命令的作用是 获取存储在key上的值的一个子字符串
下标 -1 为最后一个下标,下标 -2 为倒数第二个下标
15、append 命令
append 命令的作用是 追加一个值到key上
总结
这些基础的命令当中,除了可以当作基础的操作 字符串 的命令来用,也有其他方面的用处,比如在高并发当中可以用来设置锁等。把今天整理的命令完善了一个思维导图,图片如下。
⑨ redis启动,停止
1.直接启动
进入redis根目录,执行命令:
#加上‘&’号使redis以后台程序方式运行
./redis-server &
2.通过指定配置文件启动
可以为redis服务启动指定配置文件,例如配置为/etc/redis/6379.conf
进入redis根目录,输入命令:
./redis-server /etc/redis/6379.conf
#如果更改了端口,使用`redis-cli`客户端连接时,也需要指定端口,例如:
redis-cli -p 6380
后台方式启动
修改redis.conf,把daemonize no修改成daemonize yes
停止:redis-cli shutdown
查找进程号
ps -ef | grep redis
杀进程
kill -6 pid
redis快照问题错误信息如下:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
排查与解决步骤:
进入redis使用info命令查看,会发现最后一次快照失败的信息
rdb_last_bgsave_status:err
处理方法:
1.进入redis临时关闭配置(如果需要,要再redis.conf上写上该配置,不然下次重启redis配置会失效)
config set stop-writes-on-bgsave-error no
⑩ Redis-5-列表与集合的一些常用命令
前文中,介绍了String数据类型的一些常用的命令,那么下面来看一下一些针对列表与集合的常用命令
列表是Redis中另外一种数据类型,下面我们来看看列表中一些基本的操作命令
语法如下:
将一个或多个值插入到列表key的表头,如果有多个value,则会按从左到右的顺序依次插入表头,具体使用如下:
来看一下上面的命令,我在第一次执行的时候,报了一个错,因为我们之前k1对应的值不是一个list,就会报错.
第二点,lpush命令的返回值是push操作后的list的长度,如上面,我第一次push了3个value进去, 长度就是3,然后又加了两个.那长度就是5
返回列表key中的指定 区间内的元素,区间以偏移量start和stop指定,start和stop都以0开始,即0代表第一个元素,1代表第二个元素... 以此类推,也可以使用负数作为下标,以-1表示列表的最后一个元素,-2表示倒数第二个元素.... 以此类推,具体使用如下:
rpush和lpush的功能基本一致,只不过rpush中,value是按照从右到左的顺序依次插入的,使用如下:
rpop命令,可以移除列表中最后一个元素,并且返回该元素的值,使用如下:
lpop和rpop类似,只不过移除的是列表中的第一个元素,使用如下:
lindex命令,可以返回指定下标对应的元素的值,可以用正数下标,0表示第一个元素,也可以用负数下标, -1表示最后一个元素冲培拦,使用如下:
ltrim命令,可以对一个列表进行修剪,需要指定一个下标开始值和结束值, 不在这个区间的元素都会被删除掉, 下标的取值和上面都一样的,使用如下:
BLPOP是阻塞式列表的弹出原语,blpop是lpop的阻塞版本
当给定列表内,没有任何元素可以供弹出的时候,连接将被blpop命令阻塞, 当 给定的是多个key时,按参数key的先后顺序依次检查各个列表,弹出一个非空列表的第一个元素
使用这个命令的时候,需要指定阻塞的时长,单位是秒,如果在规定时间内没有元素可供弹出,则阻塞结束,返回结果是key-value的组合,具体使用如下:
来看一下上面的命令,最开始集合是有三个元素的,然后每次给定阻塞时长是5秒,弹出第一个元素,然后一共执行三次,列表中也就没有元素了,这时候,执行第四次弹出的操作,就可以看到,这里阻塞了5秒中之后,发现,还是没有可以弹出的元素,然后就阻塞结束,返回nil了
接下来看一些针对集合的操作命令
sadd命令,可以添加一个或多个指定的member元素到集合的key中, 如果值在这个集合中存在的话就忽略掉,如果集合key不存在就先新建集合,然后添加member元素到集合,具体使用如下:
第一个命令添加了v1,v2,然后下面又去添加v2,是直接被忽略掉了,已经存在的元素不会被加进去, 这里的返回值是新添加到集合里的元素的数量,不包括已经存在于集合中的元素
srem命令可以在key集合中移除指定的元素,如果指定的元素不存在,则忽略,如果key集合不存在,则被散胡视为一个空的集合,返回0,使用如下:
sismember可以返回指定的值,是不是这个key里面的成员 ,使用如下:
v3是不在k1这个集合中的, 所以返回0 , v2存在,就返回1
scard 命令可以返回指定集合中的元素的数量,如下:
可以看到,最开始元素的数量是1,然后添加一个元素进去,再查一下就是2了.
smember命令,可以返回指定key集合中的所有元素,如下:
srandmember命令,传入key的名称,然后会随机返回key集合中的一个元素,从redis2.6开始,这个命令可以指定返回元素的个数(count)
count参数详解:
如下:
spop命令和srandmember类似,不同的是 spop每次返回的元素都会被从这个集合中移除掉,如下:
sdiff用来取两中戚个集合的差集,如下:
sdiffstore和sdiff命令基本一致,不同的是会把返回的结果保存在一个新的集合中,使用如下:
sinter命令,用来计算指定集合的交集,如下:
sinterstore命令,和上面的sinter类似,但是会把返回值保存到一个新的集合中,如下:
用来计算集合的并集,如下:
sunionstore和sunion类似,但是会把返回结果保存在一个新的集合中,如下:
关于list和set的一些常用命令就说这么多,主要就是一些添加,删除,交集并集差集的操作