五大数据类型 才基本语法,到应用场景描述
常用Redis-key 语法
expire name 10 #设置key过期时间(过期就null,单位:秒)
ttl name #查询当前key剩余时间
exists name #key是否存在
move name #移除当前key
type name #返回key类型
最大内存----512M
string是以一种纯字符串作为value的形式存在的。也是这几种之中使用最多的数据结构。value可以存储json格式、数值型等。
语法:append key value
语法:del key [key …]
语法:strlen key
语法:getRange key start end
语法:setRange key offset value
语法:setEx key seconds value 设置过期时间set with expire
毫秒:psetEx key milliseconds value
语法:setNx key value 不存在才能设置成功set if no exist
0表示失败,1表示成功
语法:mset key value [key value …]
语法:mget key [key …]
语法:getset key value 先get然后在set
这里key是一个巧妙的设计:user:{id}:{filed}
缓存功能:部分数据第一查询数据库,查询完后存入redis中,后续在获取可以从redis中获取
对象缓存:
1)set存储用户信息,key=user:id,value=json格式数据
2)mset批量存储用户信息,适用于数据不断变化的应用场景
(如:用户微信余额,存取方便,效率高)
分布式锁
适用场景:在一个集群环境下 ,多个web应用时对同一个商品进行抢购和减库存操作时,可能出现超卖时,会用到分布式锁(setNX命令)(set if not exists)
setNX product:id true #返回1表示获取成功
setNX product:id false #返回0表示获取失败
...执行业务操作
del product:id #执行业务释放锁
set product:id true ex 10 nx #防止程序意外终止导致死锁
验证码:key=手机号,value=验证码,同时设置过期时间
计数器:评论数,点赞数,收藏数,评价数,销量,访问量,阅读量(一段时间后同步到mysql中)
incr article:readcount:id
get article:readcount:id
user-id:1086:fans
user-id:1086:blogs
user-id:1086:likes
共享session:redis将用户session集中管理,每次获取用户更新货查询登录信息都直接从redis中集中获取 spring session
负载均衡:把众多的访问量分到到其它的服务器上,让每个服务器的压力减少
分布式系统全局序列号:分库分表
incrBy orderId 1000 #redis批量生成序列号提升性能
如3台机器访问redis,利用redis特点:单线程incrby orderid 1000每次拿1千。0-1000;1001-2000;2001-3000.然后慢慢处理这1千容量
set发生的过程:客户端传递到服务器(请求时间t1),服务器处理时间(t2)服务器向客户端传递处理结果(t3)
Redis中列表(list)类型是用来存储多个有序的字符串,列表中的每个字符串成为元素(element),一个列表最多可以存储2^32 - 1个元素。大概40多亿
列表类型有以下特点:
语法:lpush key element [element …] 最新在最左位置
语法:Rpush key element [element …] 最新在最右位置
语法:lRange key start stop
语法:lindex key index 从0开始
语法:lpop key [count]
语法:rpop key [count]
语法:llen key
语法:lrem key count element
lrem list 1 one
语法:ltrim key start stop 通过下标截取指定的长度
语法:rpoplpush source destination
移除列表的最后一个元素,将他移动新的列表中
语法:lset key index element
将列表中指定下标的值替换为另外一个值,更新操作 存在,会更新;index不存在,会报错
语法:linsert key before|after pivot element
语法:blpop key [key …] timeout
语法:brpop key [key …] timeout
消息排队!消息队列(Lpush Rpop) 栈(Lpush Lpop)
消息队列:lpush + brpop命令组合即可实现阻塞队列
最新列表: list类型的lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表,如朋友圈的点赞列表、评论列表
排行榜:list类型的lrange命令可以分页查看队列中的数据. 但是只有定时计算的排行榜才适合使用list类型存储(实时不行).
无序不重复 (member) 40多亿
语法:sadd key member [member …]
语法:smembers key
语法:sismember key member
语法:scard key
语法:srem key member [member …] #指定
语法:srem key [count]
语法:sRandMember key [count]
语法:smove source destination member
语法:sdiff key [key …]
语法:sDiffStore destination key [key …] #返回集合存在destination
语法:sInterStore destination key [key …]
Map集合,key-map
语法:hset key field value [field value …] #set一个具体key-value
语法:hget key field #get一个字段值
hget uuid name
hmset hash f1 v1 f2 v2 #set 多个 key-value
hmget hash f1 f2 #get多个字段值
hgetall hash #get全部数据
hdel hash f2
hlen hash
hexists hash f2
key
hkeys hash
value
hvals hash
hincrby hash f3 3
hsetnx hash f2 test 存在,失败0
hsetnx hash f4 test 不存在,成功1
用户信息,变动信息,更适合对象的存储。String更适合对象存储
语法:zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]
zadd z 1 a
语法:zrange key min max
语法:zrangeByScore key min max #从小到大
zrangeByscore z -inf +inf
语法:zrevRange key start stop #从大到小
zrevRange z 0 -1
语法:zrem key member [member …]
语法:zcard z
语法:zcount key min max #区间
排序
权重
排行榜