特点:
- 单线程模型,但支持10万QPS,由于采用NIO多路复用
- 数据类型有String,hash,list,set,zset,五种。
- redis锁:数据插入保证线程安全
一、数据类型
redis中 key是区分大小写的,而操作命令如get和GET是相同的,这点类似于mysql 的语句。
String类型
最常见的数据类型,使用通用的get key / set key value 形式。
修改值,一般都是对key进行重新赋值即可,当value的值为数字类型的时候
,有自增和自减操作。而这些操作是原子性的。
-
自增自减(项目分库分表主键ID避免重复可以采用这个方案)
语法:incr decr127.0.0.1:6379> set test 1 OK 127.0.0.1:6379> incr test (integer) 2
127.0.0.1:6379> set test 1 OK 127.0.0.1:6379> incr test (integer) 2
-
自增自减指定数值
语法:incrby decrby127.0.0.1:6379> INCRBY test 11 (integer) 13 127.0.0.1:6379> DECRBY test 12 (integer) 1
-
代码里方法对应如下(以springboot的redisTemplate为例)
-
仅当不存在时赋值 setnx【SET if Not eXists】,如果存在,则set失败
可应用于分布式redis锁:如图看到提示中支持HSetNx MsetNx SetNx
mysec_139.196.194.253:0>setnx testNx 9999 "1" # 首次setKey成功 mysec_139.196.194.253:0>setnx testNx 0000 "0" # 更新失败 mysec_139.196.194.253:0>get testNx "9999"
代码如下:
-
Mset Mget 【Multiple】
mysec_139.196.194.253:0>mset testMset1 1 testMset2 2 "OK" mysec_139.196.194.253:0>mget testMset1 testMset2 1) "1" 2) "2"
代码如下:
Hash类型
- 增加语法 hset key field value
hash可以针对一个对象的属性进行赋值,如学生的身高年龄等信息
hset student name zhangsan
hset student age 23 - 批量增加 hmset key field value field value
hmset student name zhangsan age 23 score 100
3.同setnx(仅当null时set成功,返回1,反之返回0),有hsetnx与之类似
setnx student name lisi ---->0 # name域已存在
setnx student name2 zhangsan---->0 #name2域不存在
如果一个对象的多个属性经常变化,那么可以采用hash类型
List类型
list 可以作为一个队列,使用lpush,最新的数据最先得到处理,做到先进后出,类似栈。同样可以rpush,达到队列的效果。
redis的list类型是双向链表,在首尾增删查很快。
- lpush/rpush
lpush testKey 1
rpush testKey 2
–>1
–>2
- 获取多个数据 lrange
lrange testKey 0,1
–>1
–>2
- 获取队列首尾数据lpop,rpop
lpop testKey ->1 #这时1已经被删除了,不在testKey里了
rpop testKey ->2 #这时2已经被删除了,这时的testKey没有数据了
lrange testKey 0 1 # 没有数据了
Set类型
特点:无序,且不重复
- 添加/删除 sadd/srem
- 集合操作:sdiff/sinter/sunion
进行集合的差/交和并操作
ZSet类型
特点:有序集合,有和分数和属性的绑定关系
- zadd(score类似于权重)
zadd key score member
zadd student 98 张三
zadd student 99 李四 - zrem
zrem key member
zrem student 张三 - zrange key start stop
zrange student 0 1
报错
:
例如:数据库中有一个key的数据存储的是Hash类型的,但是你使用jedis执行数据操作的时候却使用了非Hash的操作方法。此时就会报:
WRONGTYPE Operation against a key holding the wrong kind of value这个错误!
换个key测试即可
二、过期时间
可以给redis的key设置过期时间(s),满足过期条件后,redis将删除这个key。
-
设置key的过期时间:expire key time # 单位是秒。
type testKey #可以查看key的类型,采用哪种查询方式
EXPIRE testKey 30 #30s后查询此key
get testKey -->null
- 设置为永久key: PERSIST key
persist testKey - 查看key的剩余过期时间:TTL key
- 设置为永久key: PERSIST key