本文共 9434 字,大约阅读时间需要 31 分钟。
安装依赖C语言依赖
yum install -y gcc-c++ automake autoconf libtool make tcl
进入/usr/local/tmp下载redis
cd /usr/local/tmpgit clone https://github.com/redis/redis.git
进入redis安装目录,编译和安装
makemake install PREFIX=/usr/local/redis
复制/usr/local/tmp/redis/中的redis.conf配置文件
cp redis.conf /usr/local/redis/bin
修改配置文件
cd /usr/local/redis/bin/vim redis.conf
修改 daemonize no 为 yes
daemonize yes
修改外部访问,注释掉bind 127.0.0.1,protected-mode 改为 no
启动redis并测试
./redis-server redis.conf
重启redis
./redis-cli shutdown./redis-server redis.conf
启动客户端工具
./redis-cli
官方地址:
set和java中的集合一样
修改redis.conf配置
# 默认noappendonly yes# aof文件名appendfilename "appendonly.aof"
关闭redis单机版
./redis-cli shutdown
新建目录
mkdir /usr/local/replica
复制目录
cp -r /usr/local/redis/bin /usr/local/replica/mastercp -r /usr/local/redis/bin /usr/local/replica/slave1cp -r /usr/local/redis/bin /usr/local/replica/slave2
修改2个从的ip和port
vim /usr/local/replica/slave1/redis.conf
指定主机ip和端口
replicaof 192.168.93.10 6379
修改自己端口
port 6380
cd /usr/local/replicavim startup.sh
在文件下添加内容
cd /usr/local/replica/master/./redis-server redis.confcd /usr/local/replica/slave1/./redis-server redis.confcd /usr/local/replica/slave2/./redis-server redis.conf
修改权限
chmod a+x startup.sh
查看启动状态
ps aux|grep redis
测试
cd /usr/local/replica/master/./redis-cli
查看信息
info replication
进去slave查看数据是否同步
cd /usr/local/replica/slave1./redis-cli -p 6380
新建目录
mkdir /usr/local/sentinel
复制redis
cp -r /usr/local/redis/bin/* /usr/local/sentinel
复制配置文件,从redis解压目录中复制sentinel配置文件
cd /usr/local/tmp/redis-5.0.5cp sentinel.conf /usr/local/sentinel
cd /usr/local/sentinelvim sentinel.conf
修改内容
port 26379daemonize yeslogFile "/usr/local/sentinel/26379.log"sentinel monitor mymaster 192.168.93.10 6379 2
复制sentinel.conf 命名为 sentinel-26380.conf
cp sentinel.conf sentinel-26380.conf
修改内容
port 26380daemonize yeslogFile "/usr/local/sentinel/26380.log"sentinel monitor mymaster 192.168.93.10 6379 2
复制sentinel.conf 命名为 sentinel-26381.conf
cp sentinel.conf sentinel-26381.conf
修改内容
port 26381daemonize yeslogFile "/usr/local/sentinel/26381.log"sentinel monitor mymaster 192.168.93.10 6379 2
杀掉进程
ps aux|grep rediskill -9 进程号
cd /usr/local/replica./startup.sh
启动三个哨兵
cd /usr/local/sentinel./redis-sentinel sentinel.conf./redis-sentinel sentinel-26380.conf./redis-sentinel sentinel-26381.conf
查看日志
cat 26379.log
测试宕机
查看redis端口号
ps aux|grep redis
killmaster,之后看哨兵端口,slave会变成master
集群中超过或等于1/2节点不可用时,整个集群不可用。为了搭建稳定集群,都采用奇数节点
从/usr/local/redis/bin 下把redis.conf复制到当前目录中,命名为redis-7001.conf
cp /usr/local/redis/bin/redis.conf /usr/local/redis/bin/redis-7001.conf
cd /usr/local/redis/binvim redis-7001.conf
需要修改如下
port 7001cluster-enabled yescluster-config-file ndoes-7001.confcluster-node-timeout 15000# appendonly yes 如果开启aof默认,需要修改为yes,如果使用rdb,不需要修改daemonize yesprotected-mode nopidfile /var/run/redis_7001.pid
把redis-7001.conf复制为5份
cp redis-7001.conf redis-7002.confcp redis-7001.conf redis-7003.confcp redis-7001.conf redis-7004.confcp redis-7001.conf redis-7005.confcp redis-7001.conf redis-7006.conf
修改各自的文件内容的7001为当前文件的编号
rm -f dump.rdbvim startup.sh./redis-server redis-7001.conf./redis-server redis-7002.conf./redis-server redis-7003.conf./redis-server redis-7004.conf./redis-server redis-7005.conf
在redis需要借助ruby脚本建立集群,在redis5可以用自带的redis-cli实现集群功能,比redis3方便
建议配置静态ip,ip改变,集群失效
./redis-cli --cluster create 192.168.93.10:7001 192.168.93.10:7002 192.168.93.10:7003 192.168.93.10:7004 192.168.93.10:7005 192.168.93.10:7006 --cluster-replicas 1
注意不要忘记最后一个参数-c
./redis-cli -p 7001 -cset age 18
编写关闭脚本
vim stop.shchmod a+x stop.sh./redis-cli -p 7001 shutdown./redis-cli -p 7002 shutdown./redis-cli -p 7003 shutdown./redis-cli -p 7004 shutdown./redis-cli -p 7005 shutdown./redis-cli -p 7006 shutdown
public class JedisTest{ @Test public void testStandalone(){ Jedis jedis = new Jedis("192.168.93.10", 6379); Jedis.set("name", "test-standalone"); String value = jedis.get("name"); System.out.println(value); }}
public void testPool(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(20); jedisPoolConfig.setMaxIdle(5); jedisPoolConfig.setMinIdle(3); JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.93.10", 6379); Jedis jedis = jedisPool.getResource(); jedis.set("name", "test-pool"); String value = jedis.get("name"); System.out.println(value);}
@Testpublic void testCluster(){ Setset = new HashSet (); set.add(new HostAndPort("192.168.93.10", 7001)); set.add(new HostAndPort("192.168.93.10", 7002)); set.add(new HostAndPort("192.168.93.10", 7003)); set.add(new HostAndPort("192.168.93.10", 7004)); set.add(new HostAndPort("192.168.93.10", 7005)); set.add(new HostAndPort("192.168.93.10", 7006)); JedisCluster jedisCluster = new JedisCluster(set); jedisCluster.set("name", "test"); String value = jedisCluster.get("name"); System.out.println(value);}
添加parent和web的启动器依赖,然后添加redis和mybatis的依赖
添加依赖,官方地址:
org.springframework.boot spring-boot-starter-data-redis
添加依赖,官方地址:
org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2
pojo.Product
public class Product implements Serializable{ private Integer id; private String name; private Double price; // getter setter}
mapper.ProductMapper
public interface ProductMapper{ public Product findProductById(Integer id);}
ProductMapper.xml
ProductService
public interface ProductService{ public Product findProductById(Integer id);}
ProductServiceImpl
@Servicepublic class ProductServiceImpl implements ProductService { @Autowired private ProductMapper productMapper; @Override public Product findProductById(Integer id){ String key = "product:" + id; // 先从redis中获取数据 if(redisTemplate.hasKey(key)){ System.out.println("执行缓存"); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Product.class)); Product product = (Product)redisTemplate.opsForValue().get(key); return product; } // 执行mysql Product product = productMapper.findProductById(id); redisTemplate.opsForValue().set(key, product); return product; }}
ProductController
@Controllerpublic class ProductController{ @Autowired private ProductService productService; @GetMapping("/show") public String select(Integer id, Model model){ Product product = new productService.findProductById(id); model.addAttribute("product", product); return "show"; }}
SpringBootApplication
@SpringBootApplication@MapperScan("com.test.mapper")public class ProductApplication{ public static void main(String[] args){ SpringApplication.run(ProductApplication.class, args); }}
application.yml
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: rootmybatis: type-aliases-package: com.test.pojo mapper-localtions: classpath: com/test/mapper/*.xml
RedisConfig
@Configurationpublic class RedisConfig{ public RedisTemplateredisTemplate(RedisConnectionFactory factory){ RedisTemplateString redisTemplate = new RedisTemplate (); redisTemplate.setKeySerializer(new StiringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer
转载地址:http://pxjkz.baihongyu.com/