mac下安装

  1. 到官网https://redis.io/download 下载最新版本,我的是3.2.0
  2. 移到/usr/local目录下:cp redis-3.2.9.tar.gz /usr/local
  3. cd /usr/local
  4. 解压:sudo tar -zxvf redis-3.2.9.tar.gz
  5. 进入解压后的目录,编译测试sudo make test
  6. sudo make install

启动redis
redis-server

使用客户端测试

1
2
3
4
5
6
➜ ~ redis-cli
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379>

连接远程redis服务器使用redis-cli -h host -p port -a password命令。

Redis配置

Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。
你可以通过 CONFIG 命令查看或设置配置项。
获取所有配置127.0.0.1:6379> config get *
可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。
当参数包含空格时,可以用双引号包含,例如:
requirepass "hello world"

从Redis2.6开始,可以直接使用命令行传递Redis配置参数,这对于测试非常有用。下面的例子启动一个Redis实例,使用6380端口,并且作为运行在127.0.0.1:6379实例的一个从属。
./redis-server --port 6380 --slaveof 127.0.0.1 6379

通过命令行传递的配置参数的形式和它们在redis.conf文件里的一模一样,只是在关键词前面加了一个前缀–。

将Redis配置为缓存
如果你打算使用Redis作为缓存,每个关键字都可能会过期,你应该考虑使用如下配置:

1
2
maxmemory 2mb
maxmemory-policy allkeys-lru

Redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String:
在Redis里面,字符串可以存储以下三种类型的值:
• 字节串(byte string)
• 整数
• 浮点数
get, set, getset key value(将给定 key 的值设为 value ,并返回 key 的旧值), incr, decr, append
Hash:
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hmset, hgetall, hget key field, hdel, hkeys, hvals, hset
List:
lpush, llen, rpush, lpop, rpop
Set:
sadd, smembers, scard, srem
zset:
zadd

更多命令参见:https://redis.io/commands

Redis-cli

redis-cli是Redis命令行接口,有两种主要的模式,一种是交互模式,用户输入命令得到结果。另一种模式是命令作为redis-cli的参数。

只是简单地运行命令,从标准输出得到结果,你只需要在命令行输入要执行的命令,作为redis-cli的参数。

1
2
3
➜ ~ redis-cli incr mycounter
(integer) 3
➜ ~

实际上,redis-cli只会在当定向到标准输出时,才显示额外的信息,为了增加可读性。否则会自动启用原生输出模式,如下:

1
2
3
4
➜ ~ redis-cli incr mycounter > /Users/aaa/aa.txt
➜ ~ cat /Users/aaa/aa.txt
4
➜ ~

在终端上可以强制为原生输出,使用–raw选项:

1
2
3
➜ ~ redis-cli --raw incr mycounter
5
➜ ~

同样地,当输出到文件或者其他命令的管道时,可以使用–no-raw来强制为人类易读的输出。

默认情况下,redis-cli连接到127.0.0.1:6379的服务端,要指定不同的主机名或IP使用-h选项,要指定端口,使用-p选项。

从其他程序获得输入
第一种,示例如下:

1
2
3
4
5
6
7
➜ ~ cat aa.txt
"hello, my name is aaa"
➜ ~ redis-cli -x set foo < aa.txt
OK
➜ ~ redis-cli get foo
"\"hello, my name is aaa\"\n"
➜ ~

第二种,aa.txt文件中的命令被一个接一个执行,就好像是用户输入的一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
➜ ~ cat aa.txt | redis-cli
OK
OK
(integer) 1
(integer) 4
"1mmm"
➜ ~ cat aa.txt
set foo "hello, my name is aaa"
set aa 0
incr aa
append aa mmm
get aa
➜ ~

Java使用Redis

下载Redis的Java客户端jar包,可以用Jedis。
github地址为https://github.com/xetorthio/jedis。
jar包下载地址为https://mvnrepository.com/artifact/redis.clients/jedis/2.9.0
然后在工程的build path里引用jar包。
示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
package com.redis;
import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String[] args)
{
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
}
}

一个Redis实例

一个纸质文具在线商店,售卖两种信纸,
蓝色信纸:每包20张,长40cm,宽30cm;
红色信纸:每包15张,长45cm,宽45cm。

Redis模式如下:
第一步建立全局信纸计数器,用来表明有多少种信纸。

1
2
127.0.0.1:6379> incr global:stationery
(integer) 1

返回的整数1用作第一种信纸的id。属性存储如下:

1
2
127.0.0.1:6379> hmset stationery:1 color blue width ' 30 cm' height '40 cm'
OK

存储纸张数量:

1
2
127.0.0.1:6379> incrby stationery:1:sheets 20
(integer) 20

第二种信纸命令如下:

1
2
3
4
5
6
127.0.0.1:6379> incr global:stationery
(integer) 2
127.0.0.1:6379> hmset stationery:2 color red width '45 cm' height '45 cm'
OK
127.0.0.1:6379> incrby stationery:2:sheets 15
(integer) 15

信纸包裹库存如下:

1
2
127.0.0.1:6379> set stationery:1:inventory 250
OK

总结如下:

| Redis键 | 描述 |
| —— | ———– |
| global:stationery |整数。用于存储计数器。每当有新的信纸时会加1。 |
| stationery:{int} |哈希。为每种信纸存储高度、宽度和颜色。 |
| stationery:{int}:sheets |整数。用于存储每件包裹中的信纸张数。 |
| stationery:{int}:inventory |整数。用于存储商店仓库中可用于销售的包裹总数。 |
| stationery:{int}:sales |有序集合。其中的每个元素以销售的UNIX时间戳作为分值,以收到的价格作为值。 |

处理系统故障

验证快照文件和AOF文件
Redis提供了两个命令行程序redis-check-aof和redis-check-dump。在不给定任何参数的情况下运行这两个程序,就可以看见它们的基本使用方法:

1
2
3
4
5
➜ ~ redis-check-aof
Usage: redis-check-aof [--fix] <file.aof>
➜ ~ redis-check-dump
zsh: command not found: redis-check-dump
➜ ~

如果用户在运行redis-check-aof程序时给定了–fix参数,那么程序将对AOF文件进行修复。程序会扫描AOF文件,寻找不正确或者不完整的命令,当发现第一个出错命令的时候,程序会删除出错的命令以及位于出错命令之后的所有命令,只保留那些位于出错命令之前的正确命令。
并没有方法可以修复出错的快照文件。

参考
菜鸟教程
https://redis.io/
《Redis实战》
《深入理解Redis》