前言:
今天写第五天的,浅浅记录下redis的一些常用操作和我的一些踩坑点
反正后面还要深入学┐(´-`)┌
今日所学:
- redis基本使用(windows)
- redis常用操作
- Java中使用redis(一些踩坑点)
目录
1.redis基本使用
Redis是一个基于内存的key-value结构数据库,一般用于储存热点信息(数据量比较大),跟mysql搭配使用
1.1 启动redis服务
redis-server.exe redis.windows.conf
1.2 连接服务器
redis-cli.exe
记得都要在redis所在的目录下进行
2. redis常用操作
2.1 字符操作
set, get, setex, setnx
注意点:
使用setex所设置的时间到了后相应的key-value会被删除
使用Setnx设置的key存在的话,将不会在设置,返回零
2.2 哈希操作
Hset, Hget, Hdel, Hkeys, Hvals
注意点:
key-value下value还能分为(filed-value),属于嵌套的键值对(二级键值对),相当于是key->{字段:值,字段:值,字段:值...}
这样的好处是更省内存且支持字段级操作
(注:同一个key中,filed是不能重复的,就相当于key不能重复一样)
2.3 列表操作
注意点:
这个列表指的是双向链表,并不是队列(队列只能一端进,另一端出)
命令的l开头,r开头指得是左操作和右操作
比如说LPOP key就是移除并获取列表的第一个元素
RPUSH key value1 value2 就是插入两个值到列表尾部
(注: 列表是唯一个同一个key中,value可以重复的)
2.4 集合操作
注意点:
插入的值不能重复
2.5 有序集合操作
注意点:
跟集合一样member不能重复,不同点是他为每个元素关联了一个score,可以进行排序(默认按照score升序)
2.6 通用模式
注意点:
这里的pattern指的是一种模式
比如说keys * -> 查找所有key
Keys set* -> 查找开头带set的key(类似于匹配)
3.Java中使用redis(踩坑点)
先看一下redis的配置类,结构没什么好讲的,跟文件上传结构配置基本是一样的(Day03-苍穹外卖里的)
看懂了那个这个自然没有问题
我这里想着重讲一下这两行代码:
特别是第二行代码(课程上并没有,但是强烈建议写上),不同于key序列化器的只能处理字符串,这个序列器可以支持处理数字,字符串,对象等等
如果不加这个value序列化器,容易产生以下问题:
1. 序列化和反序列化类型不同
haskey,value传进去的是一串二进制数字,当你要取出他们的时候,会报以下错误:
这个就是因为配置的 StringRedisSerializer 只能反序列化字符串数据,但 Redis 中存储的可能是其他类型(如 JDK 序列化的二进制数据或 Set 结构),导致类型不兼容。
但是如果你设了GenericJackson2JsonRedisSerializer()序列类型问题,乱码问题,都能很好的解决:
2.类型转换异常
如果设置的是string序列器的话,传入Integer的status会报一个类型转换异常(Integer无法转换成String),而这个设置成GenericJackson2JsonRedisSerializer()也能很好解决,因为他支持数字