主要从事Linux,云原生架构改造,服务网格,ELK,python,golang等相关技术。
分类: NOSQL
2015-06-04 17:37:44
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
[root@vm4 ~]# redis-cli shutdown
[root@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次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。
我们启动一个客户端试一下。
[root@vm4 ~]# vim /usr/local/lnmp/redis/etc/redis.conf
# requirepass foobared
requirepass westos 这里我们设置客户端登录密码为westos
[root@vm4 ~]# redis-cli shutdown
[root@vm4 ~]# redis-server /usr/local/lnmp/redis/etc/redis.conf
[root@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
[root@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上进行配置:
[root@vm5 ~]# vim /usr/local/lnmp/redis/etc/redis.conf
# slaveof
slaveof 192.168.10.131 6379
# masterauth
masterauth westos
[root@vm5 ~]# redis-server /usr/local/lnmp/redis/etc/redis.conf
[root@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"
[root@vm5 ~]# redis-cli -a westos 在slave上查看
127.0.0.1:6379> keys *
1) "age" 此时说明已经同步成功
此时我们查看那个是master那个是slave我们只需要调用info这个命令
[root@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
[root@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