WindowsへRedis 2.8をインストールしたときのメモ

# 概要

Windows環境にchocolateyを使ってRedis 2.8をインストールしたときのメモです。

**環境**

* Windows7 (64bit)
* [chocolatey] (https://chocolatey.org/) 0.9.9.11
* [Redis] (https://chocolatey.org/packages/redis-64/2.8.2104) 2.8.2104

# Redisのインストール

```bat
> choco install redis-64 -version 2.8.2104
Installing the following packages:
redis-64
By installing you accept licenses for the packages.

redis-64 v2.8.2104
 ShimGen has successfully created a shim for redis-benchmark.exe
 ShimGen has successfully created a shim for redis-check-aof.exe
 ShimGen has successfully created a shim for redis-check-dump.exe
 ShimGen has successfully created a shim for redis-cli.exe
 ShimGen has successfully created a shim for redis-server.exe
 The install of redis-64 was successful.

Chocolatey installed 1/1 package(s). 0 package(s) failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
```

## version

```bat
> redis-server --version
Redis server v=2.8.2104 sha=00000000:0 malloc=dlmalloc-2.8 bits=64 build=83ad777ec89a946b
```

```bat
> redis-cli --version
redis-cli 2.8.2104
```

## 実行環境構築

### ディレクトリ

```text
D:\dev\redis-2.8.2104
  ├─ \db
  ├─ \logs
  ├─ redis.conf
  ├─ server.bat
  └─ cli.bat
```

### confファイル

```text:redis.conf
################################ GENERAL  #####################################
port 6379
tcp-backlog 511
bind 127.0.0.1

timeout 0
tcp-keepalive 0
loglevel notice

logfile "D:/dev/redis-2.8.2104/logs/redis.log"

databases 16

################################ SNAPSHOTTING  ################################
save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes

dbfilename dump.rdb
dir "D:/dev/redis-2.8.2104/db"

################################# REPLICATION #################################
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no

slave-priority 100

################################### LIMITS ####################################
maxclients 100

############################## APPEND ONLY MODE ###############################
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes

################################ LUA SCRIPTING  ###############################
lua-time-limit 5000

################################## SLOW LOG ###################################
slowlog-log-slower-than 10000
slowlog-max-len 128

################################ LATENCY MONITOR ##############################
latency-monitor-threshold 0

############################# Event notification ##############################
notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes
```

### 実行用のバッチファイル

```bat:server.bat
redis-server.exe D:\dev\redis-2.8.2104\redis.conf
```

```bat:cli.bat
redis-cli.exe -h localhost -p 6379 -n 0
```


# chocolatey

chocolateyのオプション、コマンド

## --version

```
> choco --version
0.9.9.11
```

## --help

```
> choco --help
```

## list

```bat
> choco list
```

ローカルにインストールされたパッケージを検索

```bat
> choco list redis -localonly
redis-64 2.8.2104
1 packages installed.
```

## search

```bat
> choco search redis
```

```bat
> choco search redis -localonly
redis-64 2.8.2104
1 packages installed.
```

# Spring Data Redis

```xml
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>1.6.2.RELEASE</version>
</dependency>
```

```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

  @Bean
  public JedisConnectionFactory jedisConnectionFactory() {
    return new JedisConnectionFactory();
  }

  @Bean
  public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(jedisConnectionFactory());
    template.setKeySerializer(new StringRedisSerializer());
    template.setEnableTransactionSupport(true);
    return template;
  }

}
```

*application.properties*

```text
# REDIS (RedisProperties)
spring.redis.database=0 # Database index used by the connection factory.
spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
spring.redis.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
spring.redis.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
spring.redis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
spring.redis.port=6379 # Redis server port.
spring.redis.sentinel.master= # Name of Redis server.
spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
spring.redis.timeout=0 # Connection timeout in milliseconds.
```

[RedisProperties.java] (https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/redis/RedisProperties.java)