zoukankan      html  css  js  c++  java
  • redis安装及基础操作(1)

    =============================================================

    编译安装

    0、环境
      Linux:centos6.5

      redis:3.0.5

    1、下载

      方式一:官网下载war包,通过xftp拷贝到linux服务器,解压;

      方式二:linux服务器,执行命令 wget http://download.redis.io/releases/redis-3.0.5.tar.gz

    2、编译

      2.1 解压

        tar -zxvf redis-3.0.5.tar.gz

      2.1 编译    

    cd redis-3.0.5/
    make
    make install 程序会被复制到/usr/local/bin目录内,在命令行中直接输入程序命令即可执行,可省略

      2.3 测试是否成功    

    cd src
    ./redis-server 

       新打开一个终端窗口,执行命令:./redis-3.0.5/src/redis-cli

        set foo bar

        get foo 

    安装错误解决:

      https://blog.csdn.net/wenwen360360/article/details/70162169

      https://blog.csdn.net/libra_ts/article/details/71195128

    可执行文件: src目录下

    redis-server Redis服务器

    redis-cli 命令行客户端

    redis-benchmark 性能测试工具

    redis-check-aof AOF文件修复工具

    redis-check-rdb RDB文件检查工具

    启动Redis

      直接启动,适用开发环境

        运行redis-server

        redis-server --port 6380

        redis-server /path/redis.conf

      通过初始化脚本启动,适用生产环境

        在Linux中可以通过初始化脚本启动Redis,使得Redis能随系统自动运行,在生产环境推荐此方法。在Reids源代码目录的utils文件夹中有一个名为redis_init_script的初始化脚本,具体参考:Linux下Redis开机自启(Centos),https://blog.csdn.net/qq_27631797/article/details/79082591。

    停止Redis

      考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失,正确停止是向Redis发送shutdown命令,redis-cli shutdown。当redis收到shutdown命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。

    配置

      模板redis.conf,位于源代码的根目录中。可以在redis运行时通过CONFIG SET命令在不重启Redis的情况下动态修改Redis配置,不上所有配置都可以。

    =============================================================

    命令

      命令不区分大小写

      keys pattern,pattern支持glob风格通配符,如?,*,[],x等;生产环境不建议keys *,因为会遍历所有键,影响性能

      exists key,判断键是否存在,存在返回1,否则返回0

      del key[key ...],删除一个或多个键,返回值是删除的键的个数,del命令不支持通配符,可以结合linux的管道和xargs命令自己实现删除符合规则的键,如redis-cli keys "user*" | xargs redis-cli del

      type key,获取键值的数据类型

      字符串类型

      set key value,赋值,存在则覆盖

      get key,取值,不存在会返回空结果

      incr key,递增数字,键不存在默认值为0;所有的redis命令都是原子操作

      键的命名,推荐 “对象类型:对象ID:对象属性”,如user:1:friends,多个单词用“.”分割

      incrby key increment,增加指定的整数

      decr key,递减数字

      decrby key decrement,减少指定的整数

      incrbyfloat key increment,递增一个双精度浮点数

      append key value,向尾部追加值

      strlen key,获取字符串长度

      mget key [key ...],同时获取多个键值

      mset key value [key value ...],同时设置多个键值

      getbit key offset

      setbit key offset value

      bitcount key [start] [end]

      bitop operation destkey key [key ...] ,上述四个命令都是关于位操作,直接对二进制位进行操作。

      散列类型

      适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。

      hset key field value

      hget key field

      hmset key field value [field value ...]

      hmget key field [field ...],赋值和取值,多个赋值和多个取值

      hgetall key 获取所有字段和字段值

      hexists key field 判断字段是否存在,存在返回1,否则返回0

      hsetnx key field value,当字段不存在时赋值,nx表示“if Not eXists”(如果不存在);如果字段已经存在,hsetnx将不执行任何操作;原子操作

      hincrby key field increment,可以使字段值增加指定的整数

      hdel key field [field ...],可以删除一个或多个字段,返回值是被删除的字段个数。

      hkeys key、hvals key,只获取字段名或字段值

      hlen key,获取字段数量

      列表类型

      存储一个有序的字符串列表,想列表两端添加元素,或是获取列表的某一个片段。

      lpush key value [value ...]、rpush key value [value ...],向列表两端增加元素

      lpop key、rpop key,从列表两端弹出元素,从列表中移除,返回被移除的元素值

      llen key,获取列表中元素的个数,直接读取现成的值

      lrange key start stop,获取列表片段,返回索引从start到stop之间的所有元素(包括两端),索引从0开始,支持负索引,-1表示最右边第一个元素

      lrem key count value,删除列表中指定的值,删除列表中前count个值为value的元素,返回值是实际删除的元素个数。count>0 从左侧删;count<0 从右侧删;count=0 删除所有

      lindex key index,获得指定索引的元素值,索引从0开始

      lset key index value,设置指定索引的元素值,索引从0开始

      ltrim key start end,只保留列表指定片段,删除指定索引范围之外的所有元素;配合lpush一起使用来限制列表中元素的个数

      linsert key before|after pivot value,向列表中插入元素,首先会在列表中从左到右查找值为pivot的元素,然后根据是before或after来决定将value插入到该元素的前面还是后面

      rpoplpush source destination,将元素从一个列表转到另一个列表

      集合类型

      集合中每个元素都是不同的,且没有顺序

      sadd key member [member ...],增加元素,返回值是成功加入的元素数量

      srem key member [member ...],删除元素,返回删除成功的个数

      smembers key,获取集合中的所有元素

      sismember key member,判断元素是否在集合中,存在返回1

      sdiff key [key ...],差集运算,集合A与集合B的差集表示A-B,属于A且不属于B的;多个值时,按先后顺序计算

      sinter key [key ...],交集运算,表示A∩B,属于A且属于B

      sunion key [key ...],并集运算,表示A∪B,属于A或属于B

      scard key,获取集合中元素个数

      sdiffstore destination key [key ...]

      sinterstore destination key [key ...]

      sunionstore destination key [key ...],上述三个命令是进行集合运算并将结果存储

      srandmember key [count],随机获取集合中的元素,指定count可以一次随机获取多个元素,count>0,获取不重复的元素;count>集合元素个数,获取集合全部元素;count<0 有可能相同

      spop key,从集合中弹出一个元素,随机选择

      有序集合类型

      zadd key score member [score member ...],增加元素

      zscore key member,获取元素的分数

      zrange key start stop [withscores],按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素,包括两端,索引从0开始,负数从后往前查找

      zrevrange key start stop [withscores],同上,从大到小

      zrangebyscore key min max [withscores] [limit offset count],获取指定分数范围的元素,如果不包含端点值,可以在分数前加上"("符号;-inf 和+inf表示负无穷和正无穷。

      zrevrangebyscore key max min [withscores] [limit offset count],同上,从大到小

      zincrby key increment member,增加某个元素的分数,返回更改后的分数

      zcard key,获取集合中元素的数量

      zcount key min max,获取指定分数范围内的元素个数

      zrem key member [member ...],删除一个或多个元素,返回成功删除的元素数量

      zremrangebyrank key start stop,按照排名范围删除元素,从小到大

      zremrangebyscore key min max,按照分数范围删除元素

      zrank key member,获取元素的排名,从小到大(从0开始,分数最小的元素排名为0)

      zrevrank key member,从大到小

      zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [argegate sum|min|max],计算多个有序集合的交集并将结果存储在destination键中(同样以有序集合类型存储),返回destination键中的元素个数。当argegate 是sum时(默认值),destination 键中元素的分数是每个参与计算的集合中该元素分数的和;另外两个类似,取最小值或最大值。

    =============================================================

      事务

      multi

      命令1 

      命令2

      ...

      exec

      在命令执行时出现的错误,是可以被redis接受并执行的。

      不支持回滚,需要开发者必须在事务出错后自己处理。

      watch命令,可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到exec命令。

      生存时间

      expire key seconds,返回1表示设置成功,单位秒

      ttl key,查看键的剩余时间

      persist key,取消键的生存时间设置;除了persist命令,使用set或getset命令为键赋值也会同时清除键的生存时间 

      pexpire key milliseconds,单位为毫秒

      pttl key,单位为毫秒

      排序

      sort命令,可以对列表、集合、有序集合进行排序;还可以通过ALPHA参数实现按照字典顺序排列非数字元素,如 sort listA ALPHA

      选项 desc,从大到小排序

      选项limit offset count,跳过前offset个元素并获取之后的count个元素

      参数by,语法为“by 参考键”,其中参考键可以是字符串类型键或是散列类型键的某个字段(表示为键名 -> 字段名)。如果提供了by参数,sort命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个"*"并获取其值,然后依据该值对元素排序;当参考键名不包含“*”时(即常量键名),sort命令将不会执行排序操作;如果几个元素的参考键值相同,则sort命令会再比较元素本身的值来决定元素的顺序;当某个元素的参考键不存在时,会默认参考键的值为0;

      参数get,不影响排序,使sort命令的返回结果不再是元素自身的值,而是get参数中指定的键值。get参数的规则和by参数一样,也支持字符串类型和散列类型的键,并使用“*”作为占位符;在一个sort命令中可以有多个get参数;get #会返回元素自身的值;

      参数store,默认情况下sort会直接返回排序结果,如果希望保存排序结果,可以使用store参数;保存后的键的类型为列表类型,如果键已经存在则会覆盖它。加上store参数后sort命令的返回值为结果的个数

      管道

      通过管道可以一次性发送多条命令并在执行完后一次性将结果返回,可以减少客户端与Redis的通信次数,降低往返时延累计值。

      节省空间

      精简键名和键值

      内部编码优化,Redis为每种数据类型都提供了两种内部编码方式

      

    =============================================================

    redis.conf 配置项说明

    1、daemonize no 

      是否把redis-server在后台启动,默认是“否”,改为yes,会生成一个pid文件

    2、pidfile

      /var/run/redis.pid,redis-server的pid文件。

    3、port

      redis-server的端口号

    4、dbfilename dump.rdb

      数据库文件的位置,最好添加绝对路径,若不添加时在启动用户的home目录下

    5、slaveof

      设置主从服务器的主服务器的地址和端口

    6、loglevel verbose

      日志级别,debug,verbose,notice,warning

    7、logfile stdout

      日志的输出文件,默认是标准输出。例如:logfile /tmp/redis.log

    8、bind 0.0.0.0 可以使外部访问该redis

    9、protected-mode no 根据情况使用

    =============================================================

    主从配置

      工作原理:

      在Slave启动并连接到Master之后,它将主动发送一条SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

      如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

    ***同一台机器的主从配置***

    ***不同机器的主从配置***

    (1)同一台机器的主从配置

      1、在同一台机器上启动两个Redis服务器,分别监听不同的端口

      2、环境说明

        master 6379,slave 6380

      3、修改配置文件

        拷贝一份redis.conf,cp redis.conf redis_slave.conf

        修改redis_slave.conf,把端口修改为6380;把slaveof 修改为 slaveof 127.0.0.1 6379

      4、测试    

    #启动master服务器,即6379端口的服务器
    ./src/redis.server redis.conf
    
    #启动slave服务器,即6380端口的服务器
    ./src/redis.server redis_slave.conf
    
    #启动master客户端
    ./src/redis.cli -h 127.0.0.1 -p 6379
    
    #启动slave客户端
    ./src/redis.cli -h 127.0.0.1 -p 6380
    
    #清空master当前数据库中的所有Keys
    127.0.0.1:6379> FLUSHDB
    
    #master中创建key
    127.0.0.1:6379> set foo aaa
    OK
    127.0.0.1:6379> set foo2 bbb
    OK
    
    #查看master中存在哪些Keys
    127.0.0.1:6379> keys *
    1) "foo"
    2) "foo2"
    
    #在slave中查看keys
    127.0.0.1:6380> keys *
    1) "foo2"
    2) "foo"
    
    #在master中删除其中一个测试Key,并查看删除后的结果。
    127.0.0.1:6379> del foo
    (integer) 1
    127.0.0.1:6379> keys *
    1) "foo2"
    
    #在slave中查看是否foo也已经在slave中被删除。
    127.0.0.1:6380> keys *
    1) "foo2"

    #查看同步状态主从关系
    127.0.0.1:6379> info
    内容比较多,只关注需要的:Replication项

    (2)不同机器的主从配置

      配置方式和同一台机器的配置方式基本一样,只是ip不是同一台机器而已。

    =============================================================

    其他知识点

      1、Redis服务的集中监控(redis-live的使用)

      2、Redis主从自动failover(keepalive),参考:http://www.tuicool.com/articles/eu26Vz

      3、

  • 相关阅读:
    Fiddler捕获https请求时勾选了Decrypt HTTPS traffic还是获取不到证书的问题(转)
    ERROR: ORA-01033: ORACLE initialization or shutdown in progress Oracle无法启动的解决
    JavaScript数据类型、函数、对象
    HTML5新特性
    Java 操作XML,JDOM&DOM4J
    XML引入,DOM 方式解析XML 原理,SAX 方式解析XML
    Json引入键值key&value,数组,嵌套,用户注册
    Ajax异步XMLHttpRequest对象
    JavaScript基于对象引入,闭包,面向对象的实现
    MySql存储过程的操作
  • 原文地址:https://www.cnblogs.com/bookwed/p/4895412.html
Copyright © 2011-2022 走看看