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、

原文地址:https://www.cnblogs.com/bookwed/p/4895412.html