redis学习笔记

来源:互联网 发布:凯里欧文2017数据 编辑:程序博客网 时间:2024/06/06 09:34


键值相关命令:


keys:返回满足给定pattern的所有key,如 keys my*
exists:确认一个key是否存在,如exists name
del:删除一个key,如 del name

move:将key从一个数据库移动到另一个数据库, move name 1
expire:设置一个key的过期时间,如 expire name 1
select:选择数据库,如 select 0,redis数据库编号从0-15,可以选择其中任意一个

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

randomkey:随机放回key空间的一个key

rename:重命名,renam name_old  name_new

type:返回值的类型,type set2

ping:测试连接是否存活,返回为pong时表示连接正常

echo:在命令行打印一些内容,echo lijie

quit:退出连接

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


服务器相关命令:

info:获取服务器的相关信息

config get:实时传储收到的请求,config get dir

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

flushall:删除所有数据库中的所有key


REDIS高级实用特性

1.安全性

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

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

    在配置文件redis.conf中指定密码 requirepass  beijing,然后重启服务

    启动服务时指定密码: redis-cli -a beijing

2.主从复制

   redis主动复制配置和使用都非常简单,通过主从复制可以允许多个slave server拥有和master server相同的数据库副本

   redis主从复制的特定:

      a. master可以拥有多个slave

      b. 多个slave可以连接同一个master外,还可以连接到其他slave

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

      d. 提高系统的伸缩性

   redis主从复制过程:

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

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

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

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

    配置主从服务器:

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

    slaveof  192.168.1.1 6379   #指定master的ip和端口

    masterauth  beijing  # 这是主机的密码

    如何判断哪个是主哪个是从:只需调用info就可得到主从的信息,我们在从库中执行info,看到role:slave,说明是从

3.事物处理

    redis对事务处理的支持比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他的client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。

    discard:清空事务的命令队列并退出事务上下文,也就是我们常说的事务回滚

    乐观锁负责事务控制:

    乐观锁:大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个"version"字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1,此时,将提交数据的版本号与数据库表对应的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为 过期数据。

    watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了。注意watch和key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然了,exec,discart,unwatch命令都会清除连接中的所有监视。

    redis的事务实现存在的问题:第一个问题是redis只能保证事务的每个命令连续执行,但是如果事务中的一个命令失败了,并不回滚其他命令,比如使用的命令类型不匹配。

   

4.持久化机制

    redis是一个支持持久化的内存数据库,也就是说redis需要经常讲内存中的数据同步到硬盘来保证持久化。

    redis支持两种持久化方式:

    a. snapshotting(快照)也是默认方式

    b. Append-only file(缩写aof)的方式

    快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照。如  save 900 1   #900秒内如果超过1个key被修改,则发起快照保存

                    save 300 10  #300秒内如果超过10个key被修改,则发起快照保存

    aof方式:由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

    当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。

     appendonly yes  // 启用aof持久化方式

     # appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化

     appendfsync everysec  //每秒种写入磁盘一次,在性能和持久化方面做了很好的折中

    # appendfsync no  //完全依赖os,性能最好,持久化没保证

   

5.发布订阅消息

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

6.虚拟内存的使用

    redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内容数据库,内存总是不够用的,除了可以将数据分割到多个redis server外,另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。

    vm-enabled yes    #开启vm功能

    vm-swap-file  /tmp/redis.swap   #交换出来的value保存的文件路径

    vm-max-memory 1000000    #redis使用的最大内存上限

    vm-page-size 32   #每个页面的大小32字节

    vm-pages 134217728    #最多使用多少页面

    vm-max-threads 4   #用于执行value对象换入缓存的工作线程数量


0 0
原创粉丝点击