博客
关于我
Redis简介(数据结构,哨兵、集群和SpringDataRedis)
阅读量:408 次
发布时间:2019-03-06

本文共 5507 字,大约阅读时间需要 18 分钟。

Redis入门与实践指南

Redis简介

Redis是一种广泛应用的开源数据库系统,属于NoSQL数据库范畴,擅长处理非结构化数据。它支持多种数据类型,如字符串、哈希、列表、集合和有序集合,适用于高性能数据存储和实时数据处理。

Redis单机版安装

安装Redis前需安装C语言工具链:

yum install -y gcc-c++ automake autoconf libtool make tcl

下载并编译Redis:

cd /usr/local/tmpgit clone https://github.com/redis/redis.gitcd redismake make install PREFIX=/usr/local/redis

启动Redis并配置守护进程:

cp redis.conf /usr/local/redis/binvim /usr/local/redis/bin/redis.confdaemonize yes# 修改bind并禁用protected-mode./redis-server redis.conf

重启服务并测试:

./redis-cli shutdown./redis-server redis.conf

启动客户端工具:

./redis-cli

Redis常用数据类型

Redis提供多种数据类型,适用于不同场景:

String(字符串)

用于存储不可变的值,支持动态长度调整。

Hash(哈希)

以键值对形式存储数据,适合结构化数据。

List(列表)

支持高效的增删改查,常用于有序数据存储。

Set(集合)

存储唯一值,支持快速 membership 检查。

Zset(有序集合)

结合集合和有序列表功能,支持按值排序查询。

Redis常用命令

以下是Redis中常用的键值操作命令:

Key操作

exists key # 判断key是否存在expire key seconds # 设置过期时间ttl key # 查看剩余过期时间del key # 删除键值对

String操作

get key # 获取字符串值setnx key value # 条件新增setex key seconds value # 设置过期时间

Hash操作

hset key field value # 设置哈希值hget key field # 获取哈希值hmset key field value # 批量设置哈希值hmget key field # 批量获取哈希值hvals key # 获取所有哈希值hgetall key # 获取所有哈希键值hdel key field # 删除哈希字段

List操作

rpush key value # 向列表末尾添加值lrange key start end # 范围查询列表值lpush key value # 向列表前添加值llen key # 获取列表长度lrem key count # 删减列表中指定数量值

Set操作

sadd key value # 添加集合成员scard key # 查看集合成员数量smembers key # 获取所有集合成员

Zset操作

zadd key value # 添加有序集合成员zrange key start end # 范围查询有序集合成员

Redis持久化策略

Redis支持两种持久化方式:RDB和AOF。

RDB

优点:支持快照备份,恢复速度快。缺点:可能丢失部分数据,需定期备份。开启RDB持久化:

# 修改redis.confcp redis.conf /usr/local/redis/bin/vim /usr/local/redis/bin/redis.confappendonly yesappendfilename appendonly.aof

AOF

优点:数据持久性更强,高安全性。缺点:文件体积大,恢复速度慢。开启AOF持久化:

vim /usr/local/redis/bin/redis.conf# 确保appendonly yes

Redis主从复制

主从复制是一种高效的数据同步方式,适合分布式系统。

主从优点

主节点处理读写,从节点只负责读。

一主多从搭建

关闭主机Redis:

./redis-cli shutdown

创建从节点目录并复制配置文件:

mkdir /usr/local/replicacp -r /usr/local/redis/bin/* /usr/local/replica/

修改从节点配置文件:

vim /usr/local/replica/slave1/redis.confreplicaof 192.168.93.10 6379port 6380

启动服务并验证同步状态:

cd /usr/local/replica/master/./redis-server redis.confcd /usr/local/replica/slave1/./redis-server redis.conf

Redis哨兵(Sentinel)

哨兵监控主从节点,自动故障转移。

搭建哨兵

创建哨兵目录并复制Redis:

mkdir /usr/local/sentinelcp -r /usr/local/redis/bin/* /usr/local/sentinel

配置哨兵:

vim /usr/local/sentinel/sentinel.confport 26379daemonize yessentinel monitor mymaster 192.168.93.10 6379 2

复制并修改哨兵配置文件:

cp sentinel.conf sentinel-26380.confvim sentinel-26380.confport 26380

启动哨兵和Redis服务:

cd /usr/local/sentinel/./redis-sentinel sentinel.conf sentinel-26380.conf sentinel-26381.conf

Redis集群

Redis集群通过复制机制实现高可用性和负载均衡。

集群搭建

配置Redis:

cp /usr/local/redis/bin/redis.conf /usr/local/redis/bin/redis-7001.confvim /usr/local/redis/bin/redis-7001.confcluster-enabled yescluster-node-timeout 15000

启动集群节点并初始化:

./redis-server redis-7001.conf./redis-server redis-7002.conf...

使用Redis-Trim命令初始化集群:

./redis-cli --cluster create 192.168.93.10:7001 192.168.93.10:7002 ... --cluster-replicas 1

Jedis与Spring Boot

Jedis是Redis客户端,支持连接池和集群操作。

Jedis简单使用

import org.jedis.Jedis;import org.jedis.JedisPool;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);    }        @Test    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);    }        @Test    public void testCluster() {        Set
set = 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); }}

Spring Boot整合

在Spring Boot项目中整合Redis:

import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.RedisConnectionFactory;import org.springframework.data.redis.connection.ClusterConnectionFactory;import org.springframework.data.redis.connection.PooledConnectionFactory;import org.springframework.data.redis.serializer.StringRedisSerializer;@Configurationpublic class RedisConfig {    @Bean    public RedisConnectionFactory redisConnectionFactory() {        return new RedisConnectionFactory() {            @Override            public 
T getConnection(String dbname, int port, String host, int timeout) { return new ClusterConnectionFactory().createPooledConnection( new PooledConnectionFactory(), host, port, dbname, timeout, 10000 ); } }; }}

总结

Redis作为高性能数据库,适用于多种场景。通过合理配置和管理,Redis可以成为企业级数据存储的重要组成部分。

转载地址:http://pxjkz.baihongyu.com/

你可能感兴趣的文章
ORAchk-数据库健康检查
查看>>
oracle 10g crs命令,Oracle 10g CRS安装问题解决一例
查看>>
Oracle 10g ORA-01034: ORACLE not available 错误
查看>>
oracle 10g的安装配置
查看>>
Oracle 11.2.0.4 x64 RAC修改public/private/vip/scan地址
查看>>
Oracle 11G INDEX FULL SCAN 和 INDEX FAST FULL SCAN 对比分析
查看>>
viewpage listview gridview加载本地大图多图OOM处理办法
查看>>
Oracle 11g UNDO表空间备份增强
查看>>
Oracle 11g 使用RMAN备份数据库
查看>>
Oracle 11g 单实例安装文档
查看>>
Oracle 11g 操作ASM权限问题
查看>>
Oracle 11g 数据类型
查看>>
Oracle 11g 编译使用BBED
查看>>
oracle 11g 静默安装
查看>>
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
查看>>
Oracle 11gR2构建RAC之(2)--配置共享存储
查看>>
Oracle 11g中的snapshot standby特性
查看>>
Oracle 11g关闭用户连接审计
查看>>
Oracle 11g忘记sys、system、scott密码该这样修改!
查看>>
Oracle 11g数据库安装和卸载教程
查看>>