面试官经常问的Redis几种数据类型的用法和应用场景整理好了
1、字符串1.1 介绍
string 字符串类型是Redis中最为常用和基础的存储类型 , 是一个由字节组成的序列 , 他在Redis中是二进制安全的 , 也可以认为string字符串数据类型能够接收任何格式的数据 , 像JPEG图像数、Json等 , 是标准的key-value , 一般来存字符串 , 整数和浮点数 。
- 数据长度:string字符串类型最大能容纳的512MB的数据长度 。
文章插图
1.2 使用场景
【面试官经常问的Redis几种数据类型的用法和应用场景整理好了】最常见的使用场景就是对于网站访问量的统计 , 例如在线人数、点赞数量和访问人数等 。
总体来说Redis的string字符串类型主要有以下几种应用场景:
- 计数器
- 分布式锁
jedisCommands.set("key", "1", "NX", "EX", 60);//如果"key"不存在 , 则将其设值为1 , 同时设置60秒的自动过期时间
- 存储对象
1.3 更多特性
文章插图
// stringasync function stringFun() {const [key1, key2, key3, key4, key5] = ["key1", "key2", "key3", "key4", "key5"];const [v1, v2, v3, v4, v5] = ["v1", "v2", "v3", "v4", "v5"];// 1. set getawait redis.set(key1, v1);// 2. 过期时间await redis.setex(key2, 10, v2);// 3. 自增await redis.incr(key3);// 4. 加减await redis.incrby(key3, 100);// 5. 是否存在const judgeKey4 = await redis.exists(key4);// 6. value lengthconst keyLen = await redis.strlen(key1);const getValue = http://kandian.youth.cn/index/await redis.get(key1);const hgetVaule = await redis.mget(key1, key2, key3);console.log("getValue : ", getValue);console.log("hgetVaule : ", hgetVaule);console.log("judgeKey4 : ", judgeKey4);// 6. 删除await redis.del(key1, key2, key3, key4);process.exit(1);};41 77 93 11 42 94 18 30 97 10 51 39 61 81 50 88 45 82 3 37 31 35 15 25 27 90 32 52 69 21 89 33 100 58 13 12 14 24 86 17 19 56 54 68 60 53 87 76 5 29 83 1 55 85 36 9 38 62 75 79 57 49 74 72 2 99 63 65 91 44 84 67 73 23 34 92 7 8 71 43 6 66 78 20 64 26 22 16 80 70 96 4 48 28 98 95 40 59 46 47
2、Hash2.1 介绍在Redis中Hash数据类型可以看成具有string key和value的map容器 , hash支持可以将多个key/value 存储到一个key 中 。
- 数据长度:每个 hash 可以存储 232 - 1 键值对(40多亿) 。
- 购物车
文章插图
- 存储对象
2.3 更多特性
文章插图
/** * Hash * 应用场景: * 1. 【存-取-改】用户信息【ID、name、age..】 , 无需set\get string 序列化 。* 2. 初始化 , 缓存用户信息 * 3. 购物车 , 用户ID:物品ID、数量增减、删除 * 4. 商品的价格、销量、关注数、评价数等可能经常发生变化的属性 , 就适合存储在hash类型里 */async function hashFun() {const userObj = { id: 1, name: 'zhangsan', age: 18 }const userKey = 'user_1';// 1. hset key filed valueawait redis.hset(userKey, userObj);// 2. 所有的keyconst hkeys = await redis.hkeys(userKey);// 3. 整个valueconst hgetall = await redis.hgetall(userKey);console.log('hkeys: ', hkeys)console.log('hgetall: ', hgetall)// 4. 更改单个数值await redis.hset(userKey, 'age', 100);// 5. 字段加减await redis.hincrby(userKey, 'age', -90);const hgetall1 = await redis.hgetall(userKey);console.log('hgetall--: ', hgetall1)// 6. hsetnx 如果存在key , 则不更新await redis.hsetnx(userKey, 'name', 'lisi');// !7. expire 设置过期时间await redis.expire(userKey, 2);process.exit(1);/**% ts-node base.tshkeys:[ 'id', 'name', 'age' ]hgetall:{ id: '1', name: 'zhangsan', age: '18' }hgetall--:{ id: '1', name: 'zhangsan', age: '10' }*/}38 78 65 42 56 33 40 44 95 72 10 71 94 31 61 6 18 4 28 5 86 43 47 21 83 41 23 46 16 99 20 89 26 77 3 75 92 29 14 73 74 87 76 80 84 96 90 48 97 64 59 39 54 98 36 12 66 27 62 32 68 57 7 58 19 70 52 49 17 88 11 63 8 25 22 55 34 9 81 67 69 13 82 91 2 30 100 24 51 15 1 60 79 35 53 85 0 50 93 45
- 发展|我省要求互联网平台坚持依法合规经营 推动线上经济健康规范发展
- 蛋壳公寓|官媒发声:绝不能让“割韭菜者”一跑了之!
- 表达|重磅!2021世界安防博览会官方宣贯会正式召开,百余家企业表达参展意愿
- 精英|业务流程图怎么绘制?销售精英的经验之谈
- 大乱斗|社区团购大乱斗
- 公司|LVMH首席数字官跳槽至加密数字钱包公司Ledger
- 成为佛山移动服务体验官 表白留言赢取百元话费
- 余额|中兴通讯:现有资金余额仅能确保公司当前经营规模下现金流安全
- “树标提质”提升“软实力”数字经济时代创新载体大有可为
- Store|在BlueMail的App Store反垄断案中 法官作出有利于苹果公司的判决