关于redis一点小结
- 将redis中的key看成一个变量,这样能更好地理解redis
- set类型相当于个key为null的hash类型
- 所有redis中的值都是string类型
- 让redis显示中文 redis-cli --raw
#五大数据类型
-
String:字符串
-
list:是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色,能从数据的两边进行插入
-
set:一个没有重复元素的无序字符串集合
-
hash:是一个键值对类型,并且是一个string类型的field和value的映射表,适用于存储对象
1.创建hash
hset创建一个值的hash
hmset创建多个值的hash
创建hsah:要键明实意,这里key可以理解成变量,field理解成key,value就是key的值
这里创建了一个key为userInfo filed为user:1000:uid value为lxl的hash
- zset:与set相似,也是一个没有重复元素的字符串有序集合,但是每个元素都有相关联的评分,它像一个map集合
1.相同元素,不同评分,会更新评分,相同评分,不同元素,能插入进去
创建一个zset,100为评分,a为成员
#Redis事务:(类似批量执行)使用Multi开启事务,将要做的操作,先存在Redis里,然后使用Exec来实现事务的操作。Discard取消事务。
注:命令写错时,该命令加入不了到事务中,并且会直接取消该事务。
如果在事务执行过程中出现错误,则只有那一条命令会报错,其他命令正常执行。
Redis事务三大特性:单独的隔离操作,没有隔离级别的概念,不保证原子性。
watch:监视某个对象,如果事务中有该对象,并且有变化,那么该事务直接被取消
例:
#秒杀案例:三大问题
超卖问题
连接超时问题
库存遗留问题
使用连接池加lua脚本可以解决该问题