redis学习笔记(三)

来源:互联网 发布:数据字典的作用 编辑:程序博客网 时间:2024/06/04 22:09

1.键值相关命令

keys *  //取出当前数据库的所有key

exits key // 看某个key是否存在

del key //删除一个key

expire key time //设置key的生命周期

ttl key //返回key的有效时长,-1表明次key已经过期

move key  数据库名称 // select 0; move age  1; select 1;get age-> 30 将age:30从0号数据库挪到1号数据库

select 0/1/2.. 15  //总共16个数据库,选择数据库;

persist //取消定时;expire age 300;  persist age ;取消过期时间

randomkey key //随机返回当前数据库的一个key

rename key //重命名key

type key //返回key的数据类型

2.服务器相关命令

1.连接到服务器之后:ping  会返回PONG;如果redis-server没启动,则返回连接失败;

redis 127.0.0.1:6379> ping
PONG

2.echo 命令

redis 127.0.0.1:6379> echo redis
"redis"

3.quit //退出连接或者exit

4.dbsize  //返回当前数据库中key的数目。

5.info  //获取服务器的信息和统计,比如redis版本,

6.config get //实时存储收到的请求。如config get * //返回当前的配置信息,具体些:CONFIG GET save  返回save相关配置;

7.flushdb //清空所有的key,慎重使用; 直接flushdb,不用加参数:清空当前数据库

8.flushall //删除所有数据库所有key

3.redis的高级应用:

1).安全性

2).主从复制

3).事务处理

4).持久化机制

5).发布订阅消息

6).虚拟内存的使用

(一)、安全性

警告:因为Redis的速度相当快,所以一台性能较好的服务器,一个外部的用户可以在一秒钟进行15W次密码尝试。密码需要非常复杂。

在配置文件中修改:requirepass redisapp

这时:redis-cli 
Could not connect to Redis at 127.0.0.1:6379: Connection refused

如果:

redis 127.0.0.1:6379> keys *
(error) ERR operation not permitted
redis 127.0.0.1:6379> auth redisapp
OK
  //登录授权     

或者client启动时:redis-cli -a redisapp //直接加入密码就OK.

(二)、主从复制

Redis主从复制特点:

1.Master可以拥有多个slave;

2.多个Master可以连接同一个Master外,还可以连接到其他slave;

3.主从复制不会阻塞Master,在同步数据时,Master可以继续处理client请求;即同时读写不会影响性能;

4.提高系统伸缩性。

Redis主从复制过程:

1).Slave与Master建立连接,发送sync命令;

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

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

4).Slave将此文件保存到硬盘上;

配置主从服务器:

在 从服务器的redis.conf中加入slaveof <masterip> <masterport>及masterauth <master-password>即可。

怎么看当前的redis是主还是从?通过info命令,然后有个role角色,能看到master或者salve;

(三)、事务处理

redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> set age 10
QUEUED
redis 127.0.0.1:6379> set age 100
QUEUED
redis 127.0.0.1:6379> exec
1) OK
2) OK
redis 127.0.0.1:6379> get age
"100"
  //MULTI事务放入队列

事务回滚:discard

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> incr age
QUEUED
redis 127.0.0.1:6379> INCR name
QUEUED
redis 127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range
2) (integer) 1

注意:事务队列中的某个任务执行失败之后,事务不会回滚。这个是需要改进的地方。

可以通过watch命令来监听某个key,如果一旦发生变化,则此key发生的所有事情将不被执行。

(四)、持久化机制:将内存中的数据dumping到硬盘。

两种方式:1.快照(默认):只将数据存储到文件;2.aof(需要修改配置):将任何操作存到文件

1.快照:在配置文件中如: save 900 1 #900秒内超过1个key被修改,则发起保存;

2.AOF:由于快照方式是在一定间隔时间做一次的,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

此种方式:redis会将每一个收到的命令都dump到磁盘上。

(五)、发布与订阅消息

发布订阅(PUB/SUB)是一种消息通信模式,主要目的是解除消息发布者和消息订阅者之间的耦合,Redis作为一个PUB/SUB的server,在订阅者和发布者之间启动了消息路由的功能。订阅者可以通过subscribe和pubscribe命令向Redis server订阅自己感兴趣的消息类型,Redis将信息类型成为通道。当发布者通过publish命令向Redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息。

第一个终端:

redis 127.0.0.1:6379> SUBSCRIBE tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1




1) "message"
2) "tv1"
3) "tv1-pub"

第二个终端:

redis 127.0.0.1:6379> SUBSCRIBE tv1 tv2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "subscribe"
2) "tv2"
3) (integer) 2

第三个终端:发布

redis 127.0.0.1:6379> PUBLISH tv1 "tv1-pub"
(integer) 2
redis 127.0.0.1:6379> PUBLISH tv2 "tv2-test"
(integer) 1

则能够看到1,2终端有对应的消息展示。

(六)、虚拟内存:不同于操作系统的虚拟内存

暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于Redis这样的内存数据库,内存总是不够用的。因此利用虚拟内存可以把那些不经常访问的数据交换到磁盘上。