本文共 5618 字,大约阅读时间需要 18 分钟。
Redis是一种广泛应用的开源数据库系统,属于NoSQL数据库范畴,擅长处理非结构化数据。它支持多种数据类型,如字符串、哈希、列表、集合和有序集合,适用于高性能数据存储和实时数据处理。
安装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提供多种数据类型,适用于不同场景:
用于存储不可变的值,支持动态长度调整。
以键值对形式存储数据,适合结构化数据。
支持高效的增删改查,常用于有序数据存储。
存储唯一值,支持快速 membership 检查。
结合集合和有序列表功能,支持按值排序查询。
以下是Redis中常用的键值操作命令:
exists key # 判断key是否存在expire key seconds # 设置过期时间ttl key # 查看剩余过期时间del key # 删除键值对
get key # 获取字符串值setnx key value # 条件新增setex key seconds value # 设置过期时间
hset key field value # 设置哈希值hget key field # 获取哈希值hmset key field value # 批量设置哈希值hmget key field # 批量获取哈希值hvals key # 获取所有哈希值hgetall key # 获取所有哈希键值hdel key field # 删除哈希字段
rpush key value # 向列表末尾添加值lrange key start end # 范围查询列表值lpush key value # 向列表前添加值llen key # 获取列表长度lrem key count # 删减列表中指定数量值
sadd key value # 添加集合成员scard key # 查看集合成员数量smembers key # 获取所有集合成员
zadd key value # 添加有序集合成员zrange key start end # 范围查询有序集合成员
Redis支持两种持久化方式:RDB和AOF。
优点:支持快照备份,恢复速度快。 缺点:可能丢失部分数据,需定期备份。 开启RDB持久化:
# 修改redis.confcp redis.conf /usr/local/redis/bin/vim /usr/local/redis/bin/redis.confappendonly yesappendfilename appendonly.aof
优点:数据持久性更强,高安全性。 缺点:文件体积大,恢复速度慢。 开启AOF持久化:
vim /usr/local/redis/bin/redis.conf# 确保appendonly yes
主从复制是一种高效的数据同步方式,适合分布式系统。
主节点处理读写,从节点只负责读。
关闭主机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:
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:
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是Redis客户端,支持连接池和集群操作。
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项目中整合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/