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 :降序获取元素的索引