Redis 提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在 Linux 终端使用。

1. 键值相关命令;

2. 服务器相关命令

键值相关命令

keys 命令

返回满足给定 pattern 的所有 key。

【例】

127.0.0.1:> keys *
) "time"
) "list4"
) "list1"
) "email"
) "age"
) "myset6"
) "list3"
) "myhash"
) "myset4"
) "myset2"
) "list2"
) "app"
) "times"
) "realkey7"
) "key1"
) "gold"
) "myset1"
) "key3"
) "user:002"
) "myzset"
) "key4"
) "myset5"
) "realage"
) "real-age"
) "key2"
) "myset3"
) "list5"
) "name"
) "user:001"

用表达式 *,代表取出所有的 key(当前库里的所有的键)。

【例2】只显示 my 开头的键

127.0.0.1:> keys my*
) "myset6"
) "myhash"
) "myset4"
) "myset2"
) "myset1"
) "myzset"
) "myset5"
) "myset3"

exists 命令

确认一个 key 是否存在。

【例】

127.0.0.1:> exists name
(integer)

127.0.0.1:> exists school
(integer)

del 命令

删除一个 key。

【例】

127.0.0.1:> exists name
(integer) 127.0.0.1:> del name
(integer) 127.0.0.1:> del name
(integer) 127.0.0.1:> exists name
(integer)

expire 命令

设置一个(现有的) key 的过期时间。

【例】

127.0.0.1:> expire age
(integer) 127.0.0.1:> ttl age
(integer)
127.0.0.1:> ttl age
(integer)
127.0.0.1:> ttl age
(integer)
127.0.0.1:> ttl age
(integer)
127.0.0.1:> ttl age
(integer) -
127.0.0.1:> ttl age
(integer) -
127.0.0.1:> ttl age
(integer) -2

 127.0.0.1:6379> get age
  (nil)

move 命令

将当前数据库中的 key 转移到其他数据库中。

【注意】 select 命令:选择数据库。

【例】

127.0.0.1:> select 0
OK #代表选择 0 数据库 127.0.0.1:> set age
OK 127.0.0.1:> get age
"" 127.0.0.1:> move age
(integer) 127.0.0.1:> get age
(nil) 127.0.0.1:> select
OK 127.0.0.1:[]> get age
""

数据库名包括 0 - 15,共 16 个数据库;进入 Redis 客户端时,默认进入的是 0 数据库。

persist 命令

移除给定 key 的过期时间(取消定时)。

【例】

127.0.0.1:> expire age
(integer) 127.0.0.1:> ttl age
(integer) 127.0.0.1:> persist age
(integer) 127.0.0.1:> ttl age
(integer) -

randomkey 命令

随即返回 key 空间的一个 key。

【例】

127.0.0.1:> randomkey
"key3" 127.0.0.1:> randomkey
"myset3" 127.0.0.1:> randomkey
"myset3" 127.0.0.1:> randomkey
"myset3" 127.0.0.1:> randomkey
"times"

rename 命令

重命名 key。

【例】

127.0.0.1:> select
OK 127.0.0.1:[]> keys *
) "age" 127.0.0.1:[]> rename age age_new
OK 127.0.0.1:[]> keys *
) "age_new"

type 命令

返回值的类型。

【例】

127.0.0.1:> type key1
string 127.0.0.1:> type user:
hash 127.0.0.1:> type list5
list 127.0.0.1:> type myset3
set 127.0.0.1:> type myzset
zset

服务器相关命令

ping 命令

测试连接是否存活。

127.0.0.1:> ping
PONG

现在停止 Redis 服务(新开一个连接):

[root@localhost ~]# pkill redis-server

再使用 ping 命令:

127.0.0.1:> ping
Could not connect to Redis at 127.0.0.1:: Connection refused

再开启 Redis 服务(新连接):

[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

ping:

127.0.0.1:> ping
PONG

echo 命令

在命令行打印一些内容。

【例】

127.0.0.1:6379> echo dee
"dee"

select 命令

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

选择 16 时,会报错。说明没有编号为 16 的数据库。

【例】

127.0.0.1:> select
(error) ERR invalid DB index

quite 命令(exit 命令或者 ctrl + c 都是退出连接)

退出连接。

【例】

127.0.0.1:> quit

[root@localhost ~] 

dbsize 命令

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

【例】

127.0.0.1:> dbsize
(integer)

说明此库中有 26 个 key。

info 命令

获取服务器的信息和统计。

【例】

127.0.0.1:> info
# Server
redis_version:2.8.
redis_git_sha1:
redis_git_dirty:
redis_build_id:e2559761bd460ca0
redis_mode:standalone
os:Linux 2.6.-.el6.i686 i686
arch_bits:
multiplexing_api:epoll
gcc_version:4.4.
process_id:
run_id:e967856f623a542c1c31842bdd208238969433c0
tcp_port:
uptime_in_seconds:
uptime_in_days:
hz:
lru_clock:
config_file:/usr/local/redis/etc/redis.conf # Clients
connected_clients:
client_longest_output_list:
client_biggest_input_buf:
blocked_clients: # Memory
used_memory:
used_memory_human:.59K
used_memory_rss:
used_memory_peak:
used_memory_peak_human:.59K
used_memory_lua:
mem_fragmentation_ratio:2.95
mem_allocator:jemalloc-3.6. # Persistence
loading:
rdb_changes_since_last_save:
rdb_bgsave_in_progress:
rdb_last_save_time:
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:
rdb_current_bgsave_time_sec:-
aof_enabled:
aof_rewrite_in_progress:
aof_rewrite_scheduled:
aof_last_rewrite_time_sec:-
aof_current_rewrite_time_sec:-
aof_last_bgrewrite_status:ok
aof_last_write_status:ok # Stats
total_connections_received:
total_commands_processed:
instantaneous_ops_per_sec:
total_net_input_bytes:
total_net_output_bytes:
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:
sync_full:
sync_partial_ok:
sync_partial_err:
expired_keys:
evicted_keys:
keyspace_hits:
keyspace_misses:
pubsub_channels:
pubsub_patterns:
latest_fork_usec: # Replication
role:master
connected_slaves:
master_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen: # CPU
used_cpu_sys:1.27
used_cpu_user:0.22
used_cpu_sys_children:0.01
used_cpu_user_children:0.00 # Keyspace
db0:keys=,expires=,avg_ttl=
db1:keys=,expires=,avg_ttl=

info

config get 命令

实时传储收到的请求。

【例】

127.0.0.1:> config get dir
) "dir"
) "/root"

说明:上例获取了 dir 这个参数配置的值,如果想获取全部参数的配置值也很简单,只需要执行 config get * ,即可将全部的值显示出来。

【例】

127.0.0.1:> config get *
) "dbfilename"
) "dump.rdb"
) "requirepass"
) ""
) "masterauth"
) ""
) "unixsocket"
) ""
) "logfile"
) ""
) "pidfile"
) "/var/run/redis.pid"
) "maxmemory"
) ""
) "maxmemory-samples"
) ""
) "timeout"
) ""
) "tcp-keepalive"
) ""
) "auto-aof-rewrite-percentage"
) ""
) "auto-aof-rewrite-min-size"
) ""
) "hash-max-ziplist-entries"
) ""
) "hash-max-ziplist-value"
) ""
) "list-max-ziplist-entries"
) ""
) "list-max-ziplist-value"
) ""
) "set-max-intset-entries"
) ""
) "zset-max-ziplist-entries"
) ""
) "zset-max-ziplist-value"
) ""
) "hll-sparse-max-bytes"
) ""
) "lua-time-limit"
) ""
) "slowlog-log-slower-than"
) ""
) "latency-monitor-threshold"
) ""
) "slowlog-max-len"
) ""
) "port"
) ""
) "tcp-backlog"
) ""
) "databases"
) ""
) "repl-ping-slave-period"
) ""
) "repl-timeout"
) ""
) "repl-backlog-size"
) ""
) "repl-backlog-ttl"
) ""
) "maxclients"
) ""
) "watchdog-period"
) ""
) "slave-priority"
) ""
) "min-slaves-to-write"
) ""
) "min-slaves-max-lag"
) ""
) "hz"
) ""
) "repl-diskless-sync-delay"
) ""
) "no-appendfsync-on-rewrite"
) "no"
) "slave-serve-stale-data"
) "yes"
) "slave-read-only"
) "yes"
) "stop-writes-on-bgsave-error"
) "yes"
) "daemonize"
) "yes"
) "rdbcompression"
) "yes"
) "rdbchecksum"
) "yes"
) "activerehashing"
) "yes"
) "repl-disable-tcp-nodelay"
) "no"
) "repl-diskless-sync"
) "no"
) "aof-rewrite-incremental-fsync"
) "yes"
) "aof-load-truncated"
) "yes"
) "appendonly"
) "no"
) "dir"
) "/root"
) "maxmemory-policy"
) "noeviction"
) "appendfsync"
) "everysec"
) "save"
) "900 1 300 10 60 10000"
) "loglevel"
) "notice"
) "client-output-buffer-limit"
) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
) "unixsocketperm"
) ""
) "slaveof"
) ""
) "notify-keyspace-events"
) ""
) "bind"
) ""

config get *

flushdb 命令

删除当前选择数据库中的所有的 key。

【例】

127.0.0.1:> select
OK 127.0.0.1:[]> keys *
) "age_new" 127.0.0.1:[]> flushdb
OK 127.0.0.1:[]> keys *
(empty list or set) 127.0.0.1:[]> dbsize
(integer)

说明:上例中清除了 1 号数据库中所有的 key。

flushall 命令

删除所有数据库中的所有 key。

【例】

127.0.0.1:[]> dbsize
(integer) 127.0.0.1:[]> select
OK 127.0.0.1:> dbsize
(integer) 127.0.0.1:> flushall
OK 127.0.0.1:> dbsize
(integer) 127.0.0.1:> select
OK 127.0.0.1:[]> dbsize
(integer)

Redis 高级应用

1. 安全性

2. 主从复制

3. 事务处理

4. 持久化机制

5. 发布订阅消息

6. 虚拟内存的使用

1.安全性

设置客户端连接后执行任何其他指令前需要使用的密码。

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

【操作】

需要在配置文件中设置 requirepass。

【例】

[root@localhost ~]# vim /usr/local/redis/etc/redis.conf

搜索 requirepass(/ 进行搜索, n 寻找下一个):

这里设置的密码是:phpdee

保存退出。停止 redis 服务:

[root@localhost ~]# pkill redis-server

启动 redis 服务:

[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:>

进入 redis 客户端时不需要密码;但是输入命令时:

127.0.0.1:> keys *
(error) NOAUTH Authentication required.

操作被禁止(没有权限)。

授权方法:

127.0.0.1:> auth phpdee
OK
127.0.0.1:> keys *
) "time"

以上为一种授权方式。还可以在登录时输入用户名密码:

127.0.0.1:> exit

[root@localhost ~]# redis-cli -a phpdee

127.0.0.1:> keys *
) "time"

2.主从复制(重要)

Redis 主从复制配置和使用都比较简单。通过主从复制可以允许多个 slave server 拥有和 master server 相同的数据库副本。

Redis 主从复制特点:

1. master 可以拥有多个 slave;

2. 多个 slave 可以连接到同一个 master 外,还可以连接到其他 slave(注:当 master 宕掉之后,该 slave 立马转换角色,变成 master)

3. 主从复制不会阻塞 master,在同步数据时,master 可以继续处理 client 请求;

4. 提高系统的伸缩性

【过程】

当 slave(从机)向 master(主机)请求同步命令时,无论是第一次连接还是重新连接,master 都会再开启一个后台进程,把其当前的数据库备份到一个文

件(file)里,此时如果 master 还有其他操作比如插入插座,并不影响备份进程。备份成功以后,将该文件发送给 slave,slave 把该文件保存到自己的硬盘

上,启动时找到该文件,把该文件里的数据库映射到本地数据库,达到主从同步:

1. slave 与 master 建立连接,发送 sync 同步命令;

2. master 会启动一个后台进程,将数据库快照保存到文件中,同时 master 主进程会开始收集新的写命令并缓存;

3. 后台完成保存后,就将此文件发送给 slave;

4.slave 将此文件保存到硬盘上

如果 master 同时收到多个 slave 发来的同步连接命令,master 只会启动一个进程来写数据库镜像,然后发送给所有的 slave。

【配置主从服务器】

配置 slave 服务器比较简单,只需要在 slave 的配置文件中加入以下配置:

slaveof 192.168.254.100   #指定 master 的 ip 和端口
masterauth phpdee #主机的密码

使用虚拟机(VMware)进行模拟:

① 把当前虚拟机名称重命名为 Redis_master

② 关机;把该服务器克隆一下:

init 0   #关机

克隆(clone):

下一步,下一步(虚拟机的当前状态),下一步(创建一个链接克隆),虚拟机名称:Redis_slave,完成,关闭。

同时启动两台服务器(我可怜的小破本内存告急)。

登录主机(master),查看 ip 地址:

[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr :0C:::4E:A6
inet addr:192.168.254.100 Bcast:192.168.254.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe28:4ea6/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (9.9 KiB) TX bytes: (9.9 KiB)
Interrupt: Base address:0x2000

可以看到主机的 ip 地址是:192.168.254.100

登录 slave,查看 ip 地址,如果报错:

[root@localhost ~]# ifconfig eth0
eth0: error fetching interface information: Device not found

此时发现 slave 只有回环网卡:

执行 cat /proc/net/dev,发现没有 eth0,只有 eth1:

解决方案:

step1.

vim /etc/udev/rules.d/-persistent-net.rules

删除里面的 eth0 的整段。然后把 eth1(eth2) 的 NAME 修改为 eth0;记住 HWaddr;

step2.

vim /etc/sysconfig/network-scripts/ifcfg-eth0

把里面的 HWADDR 改为 之前记住的 HWaddr。

step3. 重启 slave:

reboot

重启完毕,此时:

参考:《VMWare克隆或复制虚拟机后找不到网卡的解决方法

把 slave 的 ip 地址改为和 master 同一网段:

ifconfig eth0 192.168.254.101

ping 一下 master:

ping 192.168.254.100

③ 在 master 下启动 redis 服务并进入客户端:

[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

[root@localhost ~]# redis-cli

127.0.0.1:> 

④ 授权:

127.0.0.1:> auth phpdee
OK

⑤ 清空数据库(为了主从实验)

127.0.0.1:> flushall
OK 127.0.0.1:> keys *
(empty list or set)

⑥ 配置 slave

[root@localhost ~]# vim /usr/local/redis/etc/redis.conf 

搜索 slaveof:

配置:

再搜索 masterauth:

配置:

保存退出。

⑦ 启动 slave 的 redis 服务并且授权登录:

此时 keys * ,结果为空:

⑧ master 下写入:

127.0.0.1:> set name dee
OK 127.0.0.1:> keys *
) "name" 127.0.0.1:> get name
"dee"

⑨ 在 slave 下 keys *:

此时 slave 也有了 key 为 name 的键值。

配置而且同步成功(主从复制成功)!

⑩ 在 salve 下输入 info 命令,查看角色(slave)和连接主机的状态(master_link_status:up 正在连接):

在 master 下输入 info 命令:

127.0.0.1:> info
# Server
redis_version:2.8.
redis_git_sha1:
redis_git_dirty:
redis_build_id:e2559761bd460ca0
redis_mode:standalone
os:Linux 2.6.-.el6.i686 i686
arch_bits:
multiplexing_api:epoll
gcc_version:4.4.
process_id:
run_id:d6ad6c2e439e37cbbbec728a72ba1971691511b6
tcp_port:
uptime_in_seconds:
uptime_in_days:
hz:
lru_clock:
config_file:/usr/local/redis/etc/redis.conf # Clients
connected_clients:
client_longest_output_list:
client_biggest_input_buf:
blocked_clients: # Memory
used_memory:
used_memory_human:1.62M
used_memory_rss:
used_memory_peak:
used_memory_peak_human:1.62M
used_memory_lua:
mem_fragmentation_ratio:1.09
mem_allocator:jemalloc-3.6. # Persistence
loading:
rdb_changes_since_last_save:
rdb_bgsave_in_progress:
rdb_last_save_time:
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:
rdb_current_bgsave_time_sec:-
aof_enabled:
aof_rewrite_in_progress:
aof_rewrite_scheduled:
aof_last_rewrite_time_sec:-
aof_current_rewrite_time_sec:-
aof_last_bgrewrite_status:ok
aof_last_write_status:ok # Stats
total_connections_received:
total_commands_processed:
instantaneous_ops_per_sec:
total_net_input_bytes:
total_net_output_bytes:
instantaneous_input_kbps:0.04
instantaneous_output_kbps:0.00
rejected_connections:
sync_full:
sync_partial_ok:
sync_partial_err:
expired_keys:
evicted_keys:
keyspace_hits:
keyspace_misses:
pubsub_channels:
pubsub_patterns:
latest_fork_usec: # Replication
role:master
connected_slaves:
slave0:ip=192.168.254.101,port=6379,state=online,offset=868,lag=0

master_repl_offset:
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen: # CPU
used_cpu_sys:2.25
used_cpu_user:0.46
used_cpu_sys_children:0.01
used_cpu_user_children:0.00 # Keyspace
db0:keys=,expires=,avg_ttl=
127.0.0.1:>

  

Redis 笔记与总结5 Redis 常用命令之 键值命令 和 服务器命令 && 高级应用之 安全性 和 主从复制的更多相关文章

  1. Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)

    本章对Redis服务器的数据库实现进行介绍,说明Redis数据库相关操作的实现,包括数据库中键值对的添加.删除.查看.更新等操作的实现:客户端切换数据库的实现:键超时相关功能的实现.键空间事件通知等. ...

  2. Delphi中一些常用的组合键值

    Delphi中一些常用的组合键值  CTRL+A: #1  CTRL+B: #2  CTRL+C: #3  CTRL+D: #4  CTRL+E: #5  CTRL+F: #6  CTRL+G: #7 ...

  3. Redis 笔记(五)—— HASH 常用命令

    添加和删除键值对的散列操作 命令 用例和描述 HMGET HMGET key-name key [key ...] —— 从散列里面获取一个或多个键的值 HMSET HMSET key-name ke ...

  4. 05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令

     Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用. 键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表 ...

  5. Redis笔记(三)Redis的数据类型

    前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...

  6. Redis笔记(八)Redis的持久化

    Redis相比Memcached的很大一个优势是支持数据的持久化, 通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效. Redis的持久化主要有快照Snapshot ...

  7. Redis笔记(二)Redis的部署和启动

    Linux下Redis的部署和启动 下载安装介质 Redis官网地址:http://www.redis.io/目前最新版本是redis-3.0.3. 可以访问 http://download.redi ...

  8. Redis笔记(一)Redis简介

    关于Redis Redis是一款开源的高性能键值对数据库,最初的作者是意大利的Salvatore Sanfilippo,他的github是 antirez ,Redis的源码同样托管在Git上:htt ...

  9. Redis 笔记与总结6 Redis 高级应用之 事务处理、持久化操作、pub_sub、虚拟内存

    3.事务处理 redis 对事务的支持目前还比较简单. redis 只能保证一个 client 发起的事务中的命令可以连续的执行,而中间不会插入其他 client 的命令. 由于 redis 是单线 ...

随机推荐

  1. EZ的间谍网络(codevs 4093)

    由于外国间谍的大量渗入,学校安全正处于高度的危机之中.YJY决定挺身而作出反抗.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手 ...

  2. 说说GET和POST方法的区别

    完全来自博客园的一篇文章,GET和POST有什么区别?说的非常有道理,学习了. 错误理解 反驳 GET使用URL或Cookie传参.而POST将数据放在BODY中. GET和POST与数据如何传递没有 ...

  3. 一、HTML和CSS基础--网页布局--网页简单布局之结构与表现原则

    结构.表现和行为分离,不仅是一项技术,更主要的是一种思想,当我们拿到一个网页时,先考虑设计图中的文字内容和内容模块之间的关系,重点放在编写html结构和语义化,然后考虑布局和表现形式.,减少HTML与 ...

  4. telnet 测试端口是否打开

    [root@mysqld ~]# yum list |grep telnet telnet.x86_64 1:0.17-48.el6 @base telnet-server.x86_64 1:0.17 ...

  5. 理解C#中的闭包

    闭包的概念 内层的函数可以引用包含在它外层的函数的变量,即使外层函数的执行已经终止.但该变量提供的值并非变量创建时的值,而是在父函数范围内的最终值. 闭包的优点 使用闭包,我们可以轻松的访问外层函数定 ...

  6. 二叉树学习笔记之二叉查找树(BSTree)

    二叉查找树即搜索二叉树,或者二叉排序树(BSTree),学习回顾一下有关的知识. >>关于二叉查找树 二叉查找树(Binary Search Tree)是指一棵空树或者具有下列性质的二叉树 ...

  7. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  8. HDU 4513 吉哥系列故事——完美队形II manacher

    吉哥系列故事——完美队形II Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希 ...

  9. 小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)

    到此为止,小甲鱼和大家已经学了许多关于 DOS header 和 PE header 的知识.接下来就该轮到SectionTable (区块表,也成节表).(视频教程:http://fishc.com ...

  10. phpStudy启动失败时的解决方法

    phpStudy启动失败时的解决方法 phpStudy启动失败,原因一是防火墙拦截,二是80端口已经被别的程序占用,如IIS,迅雷等:三是没有安装VC9运行库,php和apache都是VC9编译.解决 ...