一、简介什么是redis
redis是一个开源的、基于内存的高性能键值对存储数据库,支持多种数据结构如字符串、哈希、列表、集合等。
它以其卓越的性能、高可用性和持久性而广受欢迎。
为什么要使用redis
redis的使用可以解决以下问题:
- 低延迟读写:提升用户体验。
- 支撑海量数据和流量:适用于大数据和高流量的应用。
- 大规模集群管理:简化分布式应用的部署和管理。
- 成本考量:降低硬件、软件和人力成本。
二、常用redis类型及操作
1. string类型
介绍:最基本的数据存储类型,用于存储单个数据。
基本操作:
- 添加/修改数据:
set key value
- 获取数据:
get key
- 删除:
del key
2. hash类型
介绍:存储键值对集合,适用于存储对象。
基本操作:
- 添加/修改数据:
hset key field value
- 获取数据:
hget key field
- 删除数据:
hdel key field
3. list类型
基本概念:存储有序的数据集合。
基本操作:
- 添加/修改数据:
lpush key value
(左侧添加),rpush key value
(右侧添加) - 获取数据:
lrange key start stop
- 获取并移除数据:
lpop key
(左侧移除),rpop key
(右侧移除)
4. set类型
基本介绍:存储不重复的集合。
基本操作:
- 添加数据:
sadd key member
- 获取数据:
smembers key
- 删除数据:
srem key member
5. sorted set (zset)
概念:存储可排序的集合。
基本操作:
- 添加数据:
zadd key score member
- 获取全部数据:
zrange key start stop
- 删除数据:
zrem key member
三、spring boot整合redis
引入依赖
在pom.xml
中添加以下依赖:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-pool2</artifactid> <version>2.6.0</version> </dependency>
配置yaml
在application.yml
中配置redis连接信息:
spring: redis: host: 自己的ip port: 自己的端口号 # 默认 6379 database: 0 # redis使用的数据库 timeout: 18000 # 连接超时事件毫秒 password: yourpassword # 密码(如果需要) lettuce: pool: max-active: 20 # 连接池最大连接数 max-idle: 5 # 最大阻塞等待时间 min-idle: 0 # 连接池最小空闲连接
redistemplate模版序列化配置
配置redistemplate
以使用json序列化:
import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.redis.connection.lettuce.lettuceconnectionfactory; import org.springframework.data.redis.core.redistemplate; import org.springframework.data.redis.serializer.genericjackson2jsonredisserializer; import org.springframework.data.redis.serializer.stringredisserializer; import java.util.arrays; @configuration public class redisconfig { @bean public redistemplate<string,object> redistemplate(lettuceconnectionfactory lettuceconnectionfactory){ redistemplate<string, object> redistemplate = new redistemplate<>(); redistemplate.setconnectionfactory(lettuceconnectionfactory); redistemplate.setkeyserializer(new stringredisserializer()); redistemplate.setvalueserializer(new genericjackson2jsonredisserializer()); redistemplate.sethashkeyserializer(new stringredisserializer()); redistemplate.sethashvalueserializer(new genericjackson2jsonredisserializer()); redistemplate.afterpropertiesset(); return redistemplate; } }
redis的demo案例
以下是一个简单的测试案例,展示如何使用redistemplate
:
import org.junit.jupiter.api.test; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; import org.springframework.data.redis.core.redistemplate; import java.util.hashmap; import java.util.map; import java.util.concurrent.timeunit; @springboottest public class redistest { @autowired redistemplate<string, object> redistemplate; @test public void teststring() { string key = "name"; string name = "dession"; redistemplate.opsforvalue().set(key, name); redistemplate.expire(key, 1, timeunit.days); system.out.println("retrieved from redis: " + redistemplate.opsforvalue().get(key)); } @test public void testhash() { string key = "users"; redistemplate.opsforhash().put(key, "name", "zhangsan"); redistemplate.expire(key, 1, timeunit.days); map<string, object> map = new hashmap<>(); map.put("age", 12); map.put("sex", "男"); redistemplate.opsforhash().putall(key, map); object name = redistemplate.opsforhash().get(key, "name"); system.out.println("name from hash: " + name); } }
四、高级特性与安全性
高级特性
- 持久化:redis支持rdb和aof两种持久化方式,确保数据的安全性。
- 复制:通过主从复制,可以提高数据的可用性和读取性能。
- 哨兵模式:用于实现高可用性,自动故障转移。
- 集群:支持数据分片,提高存储和处理大规模数据集的能力。
安全性
- 密码认证:配置
requirepass
指令设置密码,确保只有授权用户可以访问redis。 - 网络隔离:将redis部署在内网中,避免直接暴露在公网上。
- tls/ssl:使用tls/ssl加密数据传输,保护数据在传输过程中的安全。
五、性能优化
- 选择合适的数据类型:根据使用场景选择合适的数据类型,可以提高性能和降低内存使用。
- 调整内存使用策略:通过配置
maxmemory-policy
,可以控制内存使用和数据淘汰策略。 - 监控和调优:使用redis自带的监控工具或第三方工具,如redisson、spring boot actuator等,监控redis性能并进行调优。
六、测试与部署
- 测试:在开发和测试环境中充分测试redis的集成,确保功能正确性和性能满足要求。
- 部署:在生产环境中部署redis时,考虑使用容器化技术如docker,以便于管理和扩展。
七、数据一致性
- 缓存与数据库同步:确保缓存数据与数据库数据的一致性,可以使用延迟双删策略或消息队列来实现。
八、版本更新
- 平滑升级:定期检查redis的新版本,按照官方文档进行平滑升级,以利用新特性和性能改进。
你可以在spring boot项目中成功集成redis,并使用其强大的数据结构来优化你的应用程序。redis的高级特性和最佳实践还需要你进一步探索和学习。希望这篇文章能帮助你更好地理解和使用redis。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论