1、redis-五大数据类型-string
redis最常使用的数据类型就是string类型: java对象可以转为字符串,图片也可以转为图片
redis中string类型的大小最大可以为512m,redis的字符串二进制安全
1、向redis中存入string键值对:set k v
如果键相同,后设置的值会覆盖之前的
2、获取redis中指定键的值: get k
3、给redis中指定键的值追加内容: append k appendStr
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHeRcLAT-1591843958874)(assets/1590481397066.png)]
4、获取键的值的长度: strlen key
5、当键不存在时才设置键值对: setnx k v
分布式锁
6、设置值自增1 : incr k
如果k的值已存在,必须时整形才可以自增
如果k不存在,默认在0的基础上+1
应用场景: 计数器、密码今天输错的次数、秒杀库存自减
7、设置值自减1 : decr k
8、自定义步长增减: incrby k count , decrby k count
9、设置键值对同时设置过期时间: setex key secods val
使用场景: 保存手机验证码
10、批量操作
1、批量存入多个键值对: mset k v k v …
2、批量获取多个键的值: mget k1 k2 k3…
3、批量设置键值对当键不存在时: msetnx k1 v1 k2 v2…
当有一个键如果存在时,所有的数据都保存失败
所有的键都不存在时,才可以存储成功
redis命令具有原子性,命令执行时,必须成功或者失败
java中的i++是否是原子操作?
不是,执行时,分为三步:先获取i的变量的值,执行i++操作,将计算后的结果设置到内存中
i=0;两个线程分别对i进行++100次,值是多少?2~200
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7IL7JOn8-1591843958876)(C:\Users\senbition\AppData\Roaming\Typora\typora-user-images\1590495314004.png)]
11、获取值指定范围内的内容:getrange k start end
获取时,start和end索引都包含
end如果是-1 代表获取到最后
12、替换字符串指定范围的内容:setrange k start replacestr
13、设置值并返回被替换的内容:getset k newVal
2、redis-五大数据类型-list
有序,元素可以重复,redis中list就是一个双向链表
2.1 向list中添加元素:
lpush key v1 v2 v3 v4…
v4 v3 v2 v1
rpush key v1 v2 v3…
2.2 从list中获取元素:
lrange key startIndex stopIndex
起始索引从0开始计算,stop值如果为-1代表获取所有元素
2.3 从list中吐出一个元素:
lpop key :从左吐出一个元素
rpop key:从list的右边吐出一个元素
lpush 从左向右推入 , rpop,从右开始吐出元素
2.4 获取下表对应的元素:
lindex key index
2.5 获取List元素个数
llen key
2.6 删除list中的元素:
lrem key count val : 从左开始删除list中count个val
2.7 在指定位置插入元素:
linsert key before/after 插入点 新元素
在插入点值前或后插入新的元素
3、redis-五大数据类型-set
自动去重,无序,底层是value值为null的hash
应用场景: 秒杀成功的用户列表
3.1 创建set并添加元素:
sadd key v1 v2 v3 v4…
3.2 获取set中的所有元素:
smembers key
3.3 判读set中是否包含某个元素:
sismember key val
0 代表不存在,1代表存在
3.4 获取set中元素的个数:
scard key
3.5 随机获取set中若干个元素:
srandmemeber key count
3.6 删除set中的元素:
srem key v1 v2 …
3.7 随机从set中吐出N个元素:
spop key count
值如果吐完了,键也被删除
3.8 两个set之间的并集差集交集:
sunion key1 keys :求两个set的并集
sinter key1 key2 :交集
sdiff key1 key2 :差集
4、redis-五大数据类型-hash
redis前面string、list、set只能存字符串类型,如果需要在redis中保存对象, hash就是键值对的结构,redis的键指向一个hash,hash又由多对键值对组成
4.1 创建hash并存入属性属性值
hset key field val :存入hash,hash结构的键是key,给hash结构存入一对键值对,field是属性名,val是属性值
hmset key field1 val1 field2 val2 …
4.2 查询hash执行的属性值:
hget key filed :获取hash结构的field属性值
hmget key field1 field2 … :获取hash结构的多个属性的属性值
4.3 判断hash中是否存在指定属性:
hexists key filed
4.4 获取hash结构所有的属性名或者所有的属性值
hkeys key
hvals key
4.5 给hash结构指定属性的属性值设置增量:
hincrby key field increment
4.6 给hash设置属性属性值时,当不存在时才设置:
hsetnx key field val
java代码操作redis时,一般使用 string存储java对象
gson、fastjson 可以将java对象转为json字符串存入到redis中
获取时再还原为java对象
5、redis-五大数据类型-zset
按照添加数据的分数有序集合,和set基本一样,自动去重
zset底层也是hash,但是利用了hash-val列来存分数,hash-key存zset的数据
排行榜: 考试成绩(成绩)、销量排行榜(销量)
zset存数据时,必须携带分数
5.1 向zset中添加元素和它的分数:
zadd key score1 val1 score2 val2 …
5.2 获取zset中的元素:
zrange key startindex stopindex withscores
按照分数升序查询起始索引到结束索引区间的数据并携带分数
zrerange key startindex stopindex :按分数降序查询
zrangebyscore key minScore maxScore :升序查询指定分数区间包含边界的数据
zrevrangebyscore key maxScore minScore :降序查询指定分数段的元素
5.3 给zset中的指定元素的分数添加增量
zincrby zsetkey score val
5.4 删除zset中元素:
zrem zsetkey val:
5.5 统计分数段内的元素的数量
zcount key minScore maxScore
5.6 获取元素在zset中的索引[从0开始]
zrank key val :升序获取元素的索引
zrevrank key val :降序获取元素的索引