setnx 分布式锁的解决
介绍
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
| 数据类型 | 介绍 | 描述 |
|---|---|---|
| string | 字符串 | 普通字符串,redis中最简单的数据类型 |
| list | 列表 | 按照插入顺序排列,可以有重复元素,类似于java中的LinkedList |
| set | 集合 | 无序集合,没有重复元素,类似于java中的HashSet |
| zset / sorted-set | 有序集合 | 集合中每个元素关联一个分数(score),根据分数排序,没有重复元素 |
| hash | 哈希 | 也叫散列,类似于java中的HashMap结构 |

Redis的使用
String
Redis 中字符串类型常用命令:
| 命令 | 作用描述 |
|---|---|
| set key value | 设置指定 key 的值 |
| get key | 获取指定 key 的值 |
| mset key value [key value ...] | 同时设置一个或多个 key-value 对 |
| mget key1 key2 ... | 获取所有(一个或多个)给定 key 的值 |
| setnx key value | 只有在 key 不存在时设置 key 的值, |
| incr key | 将 key 中储存的数字值增一 |
| incrby key increment | 将 key 所储存的值加上给定的增量值(increment) |
| decr key | 将 key 中储存的数字值减一 |
| decrby key decrement | key 所储存的值减去给定的减量值(decrement) |
| setex key seconds value | 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位) |
Hash
Hash是一个string类型的field和value的映射表,特别适合存储对象。常见的操作命令:
| hset key field value | 将哈希表 key 中的字段 field 的值设为 value |
|---|---|
| hget key field | 获取存储在哈希表中指定字段的值 |
| hmset key field1 value1 [field2 value2 ] | 同时将多个 field-value (域-值)对设置到哈希表 key 中 |
| hmget key field1 [field2] | 获取所有给定字段的值 |
| hdel key field2 [field2] | 删除一个或多个哈希表字段 |
| hkeys key | 获取所有哈希表中的字段 |
| hvals key | 获取哈希表中所有值 |
| hgetall key | 获取在哈希表中指定 key 的所有字段和值 |
List
List(列表)是简单的字符串列表,按照插入顺序排序,可以出现重复的元素。常用命令有:
| LPUSH KEY_NAME VALUE1.. VALUEN | 将一个或多个值插入到列表头部 |
|---|---|
| LRANGE KEY_NAME START END | 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 |
| RPOP KEY_NAME | Redis Rpop 命令用于移除并返回列表的最后一个元素 |
Set
Set(集合)是无序集合,集合中不能出现重复元素。常用命令有:
| sadd key member1 [member2] | 向集合添加一个或多个成员 |
|---|---|
| scard key | 获取集合的成员数 |
| smembers key | 返回集合中的所有成员 |
| spop key | 移除并返回集合中的一个随机元素 |
| sinter key1 [key2] | 返回给定所有集合的交集 |
| sunion key1 [key2] | 返回所有给定集合的并集 |
| sdiff key1 [key2] | 返回给定所有集合的差集 |
| srem key member1 [member2] | 移除集合中一个或多个成员 |
Zset
Sorted Set(有序集合)和集合一样不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来对集合中的成员进行排序。常用命令有:
| zadd key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
|---|---|
| zrange key start stop [withscores] | 通过索引区间返回有序集合成指定区间内的成员,分数从底到高 |
| zrangebyscore key min max [withscores] [limit] | 通过分数返回有序集合指定区间内的成员 |
| zrevrange key start stop [withscores] | 返回有序集中指定区间内的成员,通过索引,分数从高到底 |
| zrevrangebyscore key max min [withscores] | 返回有序集中指定分数区间内的成员,分数从高到低排序 |
| zincrby key increment member | 有序集合中对指定成员的分数加上增量 increment |
| zrem key member [member ...] | 移除有序集合中的一个或多个成员 |
| zcard key | 获取有序集合的成员数 |
Redis通用命令
所谓通用命令,指的是不区分数据类型都可以使用的命令:
| 命令 | 作用描述 |
|---|---|
| keys pattern | 查找所有符合给定模式( pattern)的 key |
| exists key | 检查给定 key 是否存在 |
| type key | 返回 key 所储存的值的类型 |
| del key | 该命令用于在 key 存在时删除 key |