当前位置: > 数据库 > NoSQL >

NoSQL之Redis数据库常用命令高级教程

时间:2014-09-08 21:41来源:linux.it.net.cn 作者:it

一 .Redis常用命令

Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。
a.键值相关命令
b.服务器相关命令
1.键值相关命令
Keys:返回满足给定pattern的所有key
 

redis 127.0.0.1:6379> keys *  
1) "myzset2"  
2) "myzset3"  
3) "mylist"  
4) "myset2"  
5) "myset3"  
6) "myset4"  
7) "list1"  
redis 127.0.0.1:6379> keys my*  
1) "myzset2"  
2) "myzset3"  
3) "mylist"  
4) "myset2"  
5) "myset3"  
6) "myset4"  

exists:确认一个key是否存在。
如下从结果来看,name键不存在,age键存在。
 

redis 127.0.0.1:6379> exists name  
(integer) 0  
redis 127.0.0.1:6379> exists age  
(integer) 1  
del:删除一个key

redis 127.0.0.1:6379> del age  
(integer) 1  
redis 127.0.0.1:6379> exists age  
(integer) 0  
 

expire:设置一个key的过期时间。
在下例中,设置addr这个key的过期时间是10秒,然后不断的用ttl来获取这个key的有效时长,直至为-1说明此值已过期。
 

redis 127.0.0.1:6379> expire addr 10  
(integer) 1  
redis 127.0.0.1:6379> ttl addr  
(integer) 8  
redis 127.0.0.1:6379> ttl addr  
(integer) 1  
redis 127.0.0.1:6379> ttl addr  
(integer) -1  //代表addr已经过期  
redis 127.0.0.1:6379> get addr  
(nil)  
redis 127.0.0.1:6379> exists addr  
(integer) 0 

move:将当前数据库中的key转移到其它数据库中。
数据库是从0到15,select 0表示选择0号数据库。
 

redis 127.0.0.1:6379> select 0  
OK  
redis 127.0.0.1:6379> set age 30  
OK  
redis 127.0.0.1:6379> get age  
"30"  
redis 127.0.0.1:6379> move age 1  //将age从0数据库移到1数据库  
(integer) 1  
redis 127.0.0.1:6379> get age  
(nil)  
redis 127.0.0.1:6379[1]> select 1  
OK  
redis 127.0.0.1:6379[1]> get age  
"30"  
redis 127.0.0.1:6379[1]> select 0  
OK  
redis 127.0.0.1:6379> exists age  
(integer) 0  

persist:移除给定key的过期时间
 

redis 127.0.0.1:6379> expire age 300  
(integer) 1  
redis 127.0.0.1:6379> ttl age  
(integer) 294  
redis 127.0.0.1:6379> persist age  
(integer) 1  
redis 127.0.0.1:6379> ttl age  
(integer) -1  //-1表示取消了过期时间 

randomkey:随机返回key空间的一个key。
 

redis 127.0.0.1:6379> randomkey  
"mylist7"  
redis 127.0.0.1:6379> randomkey  
"mylist5" 

rename:重命名key。
 

redis 127.0.0.1:6379> keys *  
1) "age"  
redis 127.0.0.1:6379> rename age age_new  
OK  
redis 127.0.0.1:6379> keys *  
1) "age_new" 

type:返回值的类型。
 

redis 127.0.0.1:6379> type addr  
string  
redis 127.0.0.1:6379> type myzset2  
zset  
redis 127.0.0.1:6379> type mylist  
list 

2.服务器相关命令
ping:测试连接是否存活。
 

redis 127.0.0.1:6379> ping  
PONG  
//执行下面命令之前,停止redis服务器  
redis 127.0.0.1:6379> ping  
Could not connect to Redis at 127.0.0.1:6379:Connection refused  
//执行下面命令之前,启动redis服务器  
redis 127.0.0.1:6379> ping  
PONG  
 

第一个ping时,说明此连接正常;第二个ping之前,我们将redis服务器停止,那么ping是失败的;第三个ping之前,我们将redis服务器启动,那么ping是成功的。
 

echo:在命令行打印一些内容。
redis 127.0.0.1:6379> echo lamp  
"lamp" 

select:选择数据库。Redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据的存取。
 

redis 127.0.0.1:6379> select 1  
OK  
redis 127.0.0.1:6379[1]> select 16  
(error) ERR invalid DB index   
redis 127.0.0.1:6379[16]>  

当先择16时,报错,说明没有编号为16的这个数据库。
quit:退出连接。
 

redis 127.0.0.1:6379> quit  
[root@localhost redis-2.2.12]# 

dbsize:返回当前数据库中key的数目。
 

redis 127.0.0.1:6379> dbsize  
(integer) 18  
 

结果说明此库中有18个key。
info:获取服务器的信息和统计。
 

redis 127.0.0.1:6379> info  
redis_version:2.2.12  
redis_git_sha1:00000000  
redis_git_dirty:0  
arch_bits:32  
multiplexing_api:epoll  
process_id:28480  
uptime_in_seconds:2515  
uptime_in_days:0  
.  
.  
.  
redis 127.0.0.1:6379>  

config get:实时传储收到的请求。
redis 127.0.0.1:6379> config get dir  
1) "dir"  
2) "/root/4setup/redis-2.2.12"  
redis 127.0.0.1:6379>  

本例中获取了dir这个参数配置的值,如果想获取全部参数据的配置值也很简单,只需要执行"config get *"即可将全部的值都显示出来。
flushdb:删除当前选择数据库中的所有key。
 

redis 127.0.0.1:6379> dbsize  
(integer) 18  
redis 127.0.0.1:6379> flushdb  
OK  
redis 127.0.0.1:6379> dbsize  
(integer) 0 

本例中将0号数据库中的key都清除了。
flushall:删除所有数据库中的所有key。
 

redis 127.0.0.1:6379[1]> dbsize  
(integer) 1  
redis 127.0.0.1:6379> select 0  
OK  
redis 127.0.0.1:6379> flushall  
OK  
redis 127.0.0.1:6379> select 1  
OK  
redis 127.0.0.1:6379[1]> dbsize  
(integer) 0  
redis 127.0.0.1:6379[1]> keys *  
(empty list or set)  
redis 127.0.0.1:6379[1]> select 0  
OK  
redis 127.0.0.1:6379> keys *   
(empty list or set)  

在本例中先查看了一个1号数据库中有一个key,然后切换到0号库执行flushall命令,结果1号库中的key也被清除了,说是此命令工作正常。
 
二.Redis高级实用特性
1.安全性
设置客户端连接后进行任何其他指定前需要使用的密码。
警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常强大的密码来防止暴力破解。
[root@localhost ~]# vi /usr/local/redis/etc/redis.conf  
修改配置文件中的如下配置项
#requirepass foobared  
requirepass beijing  
设置了连接的口令是beijing。
重启服务
 

[root@localhost ~]# pkill redis-server  
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf  
[root@localhost ~]# /usr/local/redis/bin/redis-cli  
redis 127.0.0.1:6379> keys *  
(error) ERR operation not permitted  
redis 127.0.0.1:6379> auth beijing  
OK  
redis 127.0.0.1:6379> keys *  
1) "name"  
redis 127.0.0.1:6379> exit  
  
[root@localhost ~]# /usr/local/redis/bin/redis-cli -a beijing  
redis 127.0.0.1:6379> keys *  
1) "name"  
 

 
2.主从复制
Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
1).Redis主从复制特点:
a.Master可以拥有多个slave
b.多个slave可以连接同一个master外,还可以连接到其它slave
c.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
d.提高系统的伸缩性
2).Redis主从复制过程:
a.Slave与Master建立连接,发送sync同步命令
b.Master会启动一个后台进程,将数据库快照保存到文件中,同时Master主进程会开始收集新的写命令并缓存
c.后台完成保存后,就将此文件发送给slave
d.Slave将此文件保存到硬盘上
3).配置主从服务器
配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:
slaveof 192.168.1.1 6379 #指定master的ip和端口  
  
masterauth beijing #这是主机的密码  
 

[root@localhost ~]# vi /usr/local/redis/etc/redis.conf  
//修改其中的slaveof <maserip> <masterport>、masterauth <master-password>  
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf  
[root@localhost ~]# /usr/local/redis/bin/redis-cli -a beijing  
redis 127.0.0.1:6379> keys *  
(empty list or set)  
 

配置好后,在Master设置任何key,在Slaver数据库中也会有,表示主从复制成功。
如在主数据库上设置一对键值对
 

redis 127.0.0.1:6379> set name master  
OK  
redis 127.0.0.1:6379>

   
在从数据库上取这个键
 

redis 127.0.0.1:6379> get name  
"master"  
redis 127.0.0.1:6379>  

怎么判断哪个是主哪个是从?
只需调用info就可以得到主从信息,在从库中执行info如下:
 

redis 127.0.0.1:6379> info  
role:slave  
master_host:localhost  
master_port:6379  
master_link_status:up  
master_last_io_seconds_ago:10  
master_sync_in_progress:0  
db0:key=1,expires=0  
redis 127.0.0.1:6379>   
 

其中role会显示是Master还是Slave服务器,master_link_status的值是up表示正在连接Master服务器。

(责任编辑:IT)
------分隔线----------------------------