https://blog.csdn.net/Butterfly_resting/article/details/89668661
http://redisdoc.com/hash/hset.html

String

image.png
image.png
实现类似于hash的存储
image.png

mset 批量插入

image.png

setnx 可以实现分布式锁

image.png

INCR:将key中存储的数字加1,redis的线程模型为单线程,天生可以防止并发问题,会把请求放到队列中,按照队列的先后顺序执行。如果使用mysql数据库,则需要考虑并发问题。

String应用场景:

计数器
web集群session共享
分布式系统全局序列号
image.png
image.png

hash

value里面又有key和value
image.png
image.png
cart:1001 购物车 10088 商品id 1 商品数量
hgetall 获取购物车中所有商品数量
image.png
image.png
购物车,如果做集群而且用的是hash数据结构,则根据hash函数计算key值,每次计算出的结果都是一个固定的值,所以一个购物车中的数据会存放在一个相同的slot中,无法进行分片存储。
image.png

List

image.png
image.png
image.png
image.png

Set image.pngimage.pngimage.png

image.pngimage.png
sinter 求交集 sunion 并集 sdiff 求差集image.png

分布式锁

image.png
当时分布式系统的时候,这种代码是有问题的。锁不住,因为每台服务器上都有一个tomcat。
image.png
image.png
模拟高并发场景,使用jmeter
image.pngimage.png
解决方法:
image.png
再完善一下:
image.png
继续完善,因为原来的代码在高并发下,会出现后一个线程删除前一个线程加的锁的情况。
image.png
市面上有一个比较成熟的解决这方面的问题的一个方案:redisson
image.png
因为主从问题而导致锁失效的问题: redis无法很好地解决 可以使用zookeeperimage.pngimage.png