数据类型
String(字符串)
-
redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象
-
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB
//常用命令
set key value //定义
get key //获取
//覆盖key存储的字符串的指定位置之后的值
//值得注意的是这个操作不会刷新字符串生命周期,是个更新的办法
SETRANGE KEY_NAME OFFSET(位置) VALUE(值)
//获取字符串长度
STRLEN KEY_NAME
Hash(哈希)
-
Redis hash 是一个键值(key=>value)对集合,他将value再分为field与value两部分,从而进行CURD
//定义以及获取
hset key name1 value1 name2 value2
hget key name1 //拿到第一个值
hget key name2 //拿地第二个值
//判断存在
HEXISTS KEY_NAME FIELD_NAME //返回的是bool值
//获取哈希表里的值
HGETALL KEY_NAME //返回的是key value交错的数组
//获取哈希表中字段的数量,也就是有几个键值对
HLEN KEY_NAME
//Redis HSCAN 命令用于迭代哈希表中的键值对,常用于模糊搜索
HSCAN key cursor [MATCH pattern] [COUNT count]
//但是由于每一次搜索后游标会变,一个解决方法是在COUNT那指定要返回多少个,或者直接暴力给一个比较大的值
//还存在的问题是会返回重复的元素,所以需要一个去重处理
//例子,要实现模糊搜索的话,$search比如说 *高*数*
hscan laravel_database 0 match $search count 1000
(图为Another Redis可视化软件实例)
List(列表)
-
按照插入顺序排序。你可以添加一个元素到列表的头部(左边L)或者尾部(右边R),类似于链表文档
Set(集合)
-
Redis 的 Set 是 string 类型的无序集合,元素不可重复,查找快
-
我的使用场景是根据计算用户喜好,浏览量,收藏量等根据所有用户来进行视频以及文章推荐,使用redis集合的交集来实现
//定义
SADD key value
//获取
SMEMBERS key
//个数
SCARD KEY_NAME
//集合交集
SINTER KEY KEY1..KEYN
//取交集并储存在DESTINATION_KEY 中
SINTERSTORE DESTINATION_KEY KEY KEY1..KEYN
//集合所有元素
SMEMBERS key
//取差异
SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
//去差异并储存
SDIFFSTORE DESTINATION_KEY KEY1..KEYN
//移除成员
SREM KEY MEMBER1..MEMBERN
zset(sorted set 有序集合)
-
可排序,元素不可重复,查询快,相对于set多了一个序号,命令与set相似
-
其中所有排名默认是升序
发布订阅
-
以及进阶的 Stream
-
很遗憾的是我暂时还未实战redis这个功能
SUBSCRIBE channel //博主订阅频道
PUBLISH channel "发布的内容" //用户收到发布的内容
事务
-
批量操作在发送 EXEC 命令前被放入队列缓存。
-
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
-
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
MULTI //开始一个事务 ... EXEC //执行
其余的一些命令
-
keys 查看符合模板的key,key多个时搜索慢同时占用了线程,生产中不建议使用
-
del 删除指定的key,可以是多个,返回的是删除的个数
-
exists 判断是否存在
-
expire 给key设置有效期
expire key <time(s)>
-
ttl 查看key剩余的时间 其中-1是永久,-2是不存在
Key的层级结构
-
允许有多个单词形成层级结构,用“:”隔开,形成文件夹类似的结构,在可视化界面里就会格外清晰
-
例如:
缓存实战运用
-
缓存优化搜索速度实现架构图
-
需要注意的是数据一致性的问题,在每一个设计到CURD的地方都要注意mysql和redis的一致性