哪个网站做生鲜配送,网站上传到虚拟主机,鹰潭做网站,wordpress改颜色Redis基础
初识Redis
认识NoSQL
SQL#xff1a;结构化查询语言 关系型数据库
NoSQL#xff1a;非关系型数据库
SQL与NoSQL的差异#xff1a;
数据结构 SQL结构化#xff1a;表的信息依赖于表的结构NoSQL非结构化#xff1a;存储的信息为KV形式 数据关联 SQL关联…Redis基础
初识Redis
认识NoSQL
SQL结构化查询语言 关系型数据库
NoSQL非关系型数据库
SQL与NoSQL的差异
数据结构 SQL结构化表的信息依赖于表的结构NoSQL非结构化存储的信息为KV形式 数据关联 SQL关联可以建立并维护表与表之间的关系外键NoSQL无关联需要自行维护数据关联 查询方式 SQL使用SQL语句查询NoSQL没有统一标准Redis、MongoDB 事物特性 SQL满足ACIDNoSQL基本可用BASE 存储方式 SQL磁盘NoSQL内存速度快 扩展性 SQL垂直本机NoSQL水平支持分布式
Redis特点
KV结构单线程命令执行具备原子性低延迟、性能快基于内存、IO多路复用、C语言编写支持数据持久化支持主从集群扩展速度、分片集群扩展存储量支持多语言客户端
Redis安装
Redis官方只提供了Linux版本
Redis常见命令
Redis通用命令
KEYS查看符合模板的所有key 不建议在生产环境或集群的主节点上使用。Redis单线程会导致线程阻塞。 KEYS *name*DEL删除key
DEL usernameDEL username passwordEXISTS判断key存在
EXISTS usernameEXPIRE给key设置有效期单位是秒到期自动删除
TTL查看有效期-2表示不存在、-1表示永不过期
EXPIRE name 20TTL nameRedis数据结构
StringHash类似JSONList列表Set无重复元素的集合SortedSet有序集合GEO经纬度坐标BitMapHyperLog
String
字符串最简单的数据类型。上限是512M。
String的类型
string字符串int整型可以自增自减float浮点类型可以自增自减
常见命令
SET添加、修改KVGET通过K查询VMSET批量添加MGET批量查询INCR整型iINCR ageageINCRBY整型inINCRBY age 2age 2INCRBYFLOAT浮点inINCRBYFLOAT level 2level 2SETNX新增KV若存在K则不添加SETEX添加KV并指定有效期 key的结构层级存储。用于key名称的设置避免了key重复的问题 项目名:业务名:类型:idhpan:user:username:1
hpan:admin:username:1Hash
无序字典类似JSON。 相比于序列化JSON以字符串形式保存。Hash结构可以更方便地修改。 常见命令
HSET key field value添加、修改key的field值HSET user:1 username wmhHGET key field查询key的field值HSET user:1 usernameHMSET、HMGET批量HGETALL查询所有的field和valueHKEYS、HVALS查询所有的field或valueHINCRBY整型valuenHINCRBY user:4 age 2user[4].age2HSETNX新增field-value若存在K则不添加
List
双向链表类似于LinkedList。可以正向、反向查找。
LPUSH/RPUSH key value左/右侧插入元素LPOP/RPOP key左/右侧弹出元素LRANGE key i j从i到j遍历元素BLPOP、BRPOP阻塞式获取有元素就取、没有元素就等
模拟栈入口出口在同一边模拟队列入口出口不在同一边模拟阻塞队列入口出口不在同一边出队使用BLPOP、BRPOP
Set
无序、元素不可重复、查找速度快、支持交集、并集、差集等。
单个Set
SADD key item…添加itemSREM key item…移除itemSCARD key查询元素个数SISMEMBER key item判断item是否存在SMEMBERS获取所有元素
Set之间
SINTER k1 k2交集SDIFF k1 k2差集SUNION k1 k2并集
SortedSet
每个元素都带一个score属性根据score排序。可排序、元素不重复、查询速度快。
ZADD key score item…添加itemZREM key item…移除itemZSCORE key item查询item的scoreZRANK key item获取item的排名ZCARD key查询元素个数ZCOUNT key min max获取分数在min到max的元素个数ZRANGE key i j获取排名为i到j的元素ZRANGEBYSCORE key min max获取分数为min到max的元素ZINCRBY key n itemitem.scorenZDIFF、ZINTER、ZUNION差集交集并集 排名默认为升序降序排名需要加上REVZRANK → ZREVRANK Redis的Java客户端
客户端介绍
Jedis方法命名和Redis命令相似。线程不安全多线程需要连接池。letture基于Netty支持同步、异步和响应式编程方式线程安全。支持哨兵模式、集群模式和管道模式。Redisson实现了分布式、可伸缩的Java数据结构。和使用原生集合一样使用Redis集合。 SpringDataRedis整合了Jedis、letture Jedis
redis/jedis: Redis Java client (github.com)
Jedis使用
1、引入依赖
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion5.0.0/version
/dependency2、建立连接
Jedis jedis new Jedis(localhost, 6379);
jedis.auth(123.com);
jedis.set(name, wmhs);
jedis.close();多线程 → 使用Jedis连接池
SpringDataRedis
简介
Spring Data Redis
整合Lettuce和jedis提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型、哨兵、集群支持基于Lettuce的响应式编程支持基于JDK、JSON、宇符串、Spring对象的数据序列化及反序列化支持基于Redis的DKCollection实现
SpringDataRedis中提供了RedisTemplate工具类其中封装了各种对Redis的操作。
不同数据类型的操作API封装到了不同的类型中 自定义RedisSerializer
RedisTemplate可以接收Object作为值写入Redis。
But采用JDK序列化Object为字节形式。占用内存大、可读性差。
So可以自行编写RedisSerializer实现使用jackson。
But写入的对象有class属性造成了额外开销。 StringRedisTemplate
Spring默认提供了一个StringRedisTemplate类KV的序列化方式默认就是String方式。
如何存对象 → 自行序列化和反序列化
常见的JSON序列化库
gsongoogle 的fastjson alibaba阿里快但是有Bugjacksonkryo
使用步骤
1、导入pom.xml配置
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency
dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId
/dependency2、配置application.yml
spring:data:redis:port: 6379host: 127.0.0.1password: 123456database: 0timeout: 10000lettuce:pool:enabled: truemax-active: 100max-wait: 10000max-idle: 10min-idle: 13、编写测试类 不连接数据库启动SpringBoot项目 SpringBootApplication(exclude {DataSourceAutoConfiguration.class})Test
void StringRedisTemplateTest() {ValueOperationsString, String ops stringRedisTemplate.opsForValue();// nameops.set(name, wmh);System.out.println(name: ops.get(name));// yxops.set(yx, gson.toJson(new User(yx, 18)));String yx ops.get(yx);System.out.println(yx: gson.fromJson(yx, User.class));
}