设为首页 收藏本站
查看: 1699|回复: 0

[经验分享] Redis的常用命令及高级应用

[复制链接]

尚未签到

发表于 2015-12-23 09:36:41 | 显示全部楼层 |阅读模式
Redis常用命令
Redis提供了丰富的命令对数据库和各种数据库类型操作,这些命令可以在Linux终端使用。
1.键值相关命令
2.服务器相关命令

键值相关命令
Keys
返回满足给定pattern的所有key
127.0.0.1:6379> keys * 用表达式*表示取出所有的key
1) "mylist3"
2) "myzset2"
3) "mylist2"
4) "myset2"
5) "myset3"
6) "key1"
7) "hy4"
8) "user:002"
9) "key6"
10) "key2"
...
127.0.0.1:6379> keys my*
1) "mylist3"
2) "myzset2"
3) "mylist2"
4) "myset2"
5) "myset3"
6) "myset"
7) "myset6"
8) "mylist4"
...

Exists
确认一个key是否存在
127.0.0.1:6379>  exists myset
(integer) 1
127.0.0.1:6379>  exists age
(integer) 1
127.0.0.1:6379>  exists hello
(integer) 0
从结果来看,myset键和age键存在,hello键不存在

Del
删除一个key
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> EXISTS ahe
(integer) 0
127.0.0.1:6379> EXISTS age
(integer) 0

Expire
设置一个key的过期时间
在本例中,我们设置addr这个key的过期时间是10秒,然后我们不断的用ttl来获取这个key的有效时常,直至为-1说明此值已过期
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> EXISTS name
(integer) 0 说明name键已经过期

Move
将当前数据库中的key转移到其它数据库中
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> EXISTS age age已经被移动到1数据库,所以不存在
(integer) 0

Persist
移除给定key的过期时间
127.0.0.1:6379[1]> expire age 300
(integer) 1
127.0.0.1:6379[1]> ttl age
(integer) 294
127.0.0.1:6379[1]> persist age 代表取消掉他的过期时间,但是它还存在
(integer) 1
127.0.0.1:6379[1]> ttl age
(integer) -1
127.0.0.1:6379[1]> get age
"20"

Randomkey
随机返回key空间的一个key
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> RANDOMKEY
"key3"
127.0.0.1:6379> RANDOMKEY
"key6"
127.0.0.1:6379> RANDOMKEY
"myset7"

Rename
重命名key
127.0.0.1:6379[1]> keys *
1) "age"
127.0.0.1:6379[1]> rename age age_new
OK
127.0.0.1:6379[1]> keys *
1) "age_new"

Type
返回值的类型
127.0.0.1:6379> type mylist
list
127.0.0.1:6379> type myset
set
127.0.0.1:6379> type myzset
zset

Ping
测试连接是否存活
127.0.0.1:6379> ping
PONG
[iyunv@vm4 ~]# redis-cli shutdown
[iyunv@vm4 ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused

Select
选择数据库。Redis数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 12
OK
127.0.0.1:6379[12]> select 16
(error) ERR invalid DB index
当选择16时,报错,说明没有编号为16的这个数据库

Quit/exit/Ctrl+c
退出连接。

Dbsize
返回当前数据库中key的数目
127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> dbsize
(integer) 27
结果说明库中有27个key

Info
获取服务器的信息和统计
127.0.0.1:6379>  info
# Server
redis_version:3.0.1
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:65a152453754ded
redis_mode:standalone
os:Linux 2.6.32-431.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:1432
run_id:53741e5b80f670976bbde9c71a45f972ec11e4a1
tcp_port:6379
uptime_in_seconds:640
uptime_in_days:0
.......

Config get
实时传储收到的请求。
127.0.0.1:6379> config get dir
1) "dir"
2) "/root"
127.0.0.1:6379>
本例中我们获取了dir这个参数配置的值,如果想获取全部参数的配置值也很简单,只需要执行“config get * ”即可将全部的值都显示出来。

Flushdb
删除当前选选择数据库中的所有key。
127.0.0.1:6379> dbsize
(integer) 27
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> dbsize
(integer) 0
在本例中我们将0号数据库中的key都清除了。

Flushall
删除所有数据库中的所有key。
127.0.0.1:6379[1]> dbsize
(integer) 1
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> dbsize
(integer) 0


Redis高级实用特性
1.安全性
2.主从复制
3.事务处理
4.持久化机制
5.发布订阅消息
6.虚拟内存的使用

安全性
设置客户端连接后进行任何其他指定前需要使用的密码。

警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

我们启动一个客户端试一下。
[iyunv@vm4 ~]# vim /usr/local/lnmp/redis/etc/redis.conf
# requirepass foobared
requirepass westos 这里我们设置客户端登录密码为westos
[iyunv@vm4 ~]# redis-cli shutdown
[iyunv@vm4 ~]# redis-server /usr/local/lnmp/redis/etc/redis.conf
[iyunv@vm4 ~]# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth westos 显示权限被禁止,我们授权
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name hy
OK
127.0.0.1:6379> quit
[iyunv@vm4 ~]# redis-cli -a westos 我们通过指定密码登录
127.0.0.1:6379> keys *
1) "name"
上面我们看到的授权的两种方式


主从复制
Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave sever拥有和master server相同的数据库副本。
Redis主从复制特点:
1.Master可以拥有多个slave
2.多个slave可以连接同一个master外,还可以连接到其它slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求。
4.提高系统的伸缩性


下面是先将数据备份,然后slave可以直接从备份中同步:



配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:
Slaveof 192.168.10.132 6379 #指定master的ip和端口

Masterauth westos #这是主机的密码


下面我们开始主从复制的配置:
vm4 192.168.10.131 master
vm5 192.168.10.133 slave
首先我们清空master和slave里面的数据:
127.0.0.1:6379> flushall
OK
然后在slave上进行配置:
[iyunv@vm5 ~]# vim /usr/local/lnmp/redis/etc/redis.conf
# slaveof  
slaveof 192.168.10.131 6379

# masterauth
masterauth westos
[iyunv@vm5 ~]# redis-server /usr/local/lnmp/redis/etc/redis.conf
[iyunv@vm5 ~]# redis-cli -a westos
127.0.0.1:6379> keys *
(empty list or set)

我们在master上写,然后查看slave中的状态
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "age"

[iyunv@vm5 ~]# redis-cli -a westos 在slave上查看
127.0.0.1:6379> keys *
1) "age" 此时说明已经同步成功


此时我们查看那个是master那个是slave我们只需要调用info这个命令
[iyunv@vm5 ~]# redis-cli -a westos 在slave上查看
127.0.0.1:6379> info
# Replication
role:slave 我们可以看到现在的这台主机为slave
master_host:192.168.10.131
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:447
slave_priority:100
slave_read_only:1
[iyunv@vm4 ~]# redis-cli -a westos 在master上查看
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.10.133,port=6379,state=online,offset=615,lag=1
master_repl_offset:615
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:614

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155074-1-1.html 上篇帖子: Redis实例之php与redis的连接 下篇帖子: Redis数据类型之Set类型和Zset类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表