Redis 数据类型结构redis
1. 字符串String
经常使用操做命令以下:
set key value 存入单个字符串键值对
get key 获取单个字符串值
mset key value [key value ...] 批量存入多个字符串键值对
mget key [key ...] 获取多个字符串值
del key [key ...] 删除键值对
expire key second 设置一个键的过时时间(秒)
setnx key value 若是 key 不存在,至关于set命令, 若是 key 不存在,什么也不作,setnx 其实是 “set if not exists” 的简写json
原子加减:
incr key 将key中储存的数字值加1,返回加1后的结果; 若是值不是数字,返回错误;key 不存在时,会建立一个key并返回1
decr key 将key中存储的数字值减1,返回减1后的结果;key不存在时,会建立一个key,并返回-1
incrby key increment 将key中存储的值加上increment,返回相加后的结果
decrby key decrement 将key中存储的值减去decrement,返回相减后的结果数组
2. 数组List
常见操做命令:缓存
lpush key value 从左侧向key对应的列表中加入一个或多个值
rpush key value 从右侧向key对应的列表中加入一个或多个值
lpop key 返回并删除key对应列表的头数据
rpop key 返回并删除key对应列表的尾数据
lrange key start end 根据起止坐标获取 key 对应的 list 值
llen key 获取 key 对应的 list 的长度 分布式
3. 哈希表 Hash
经常使用操做命令:
hset key field value 存储一个哈希表 key 的键值
hget key field 获取哈希表 key field 对应的键值
hmset key field value [field value ...] 批量存储哈希表键值
hmget key field [field ...] 批量获取哈希表中 field 对应的键值
hdel key field [field ...] 删除哈希表中 field 对应的键值
hlen key 获取哈希表 key 中 field 的个数
hgetall key 获取哈希表 key 中的全部键值
hincrby key field incrememt 增长哈希表 key 中 field 字段的 数值性能
4 集合Set
经常使用操做命令:
sadd key member [member ...] 往集合key中存入元素,元素存在则忽略
smembers key 获取集合 key 中全部元素
scard key 获取集合 key 中的元素个数
srem key member [member ...] 从集合key中删除元素
sismember key member 判断 member 元素是否存在于集合 key 中
srandmember key [count] 从集合 key 中随机选出 count 个元素
spop key [count] 从集合 key 中随机取出 count 个元素,并删除spa
运算:
sinter key [key ...] 取交集
sunion key [key ...] 取并集
sdiff key [key ...] 取差集
sinterstore destination key [key ...] 取交集,并将结果存入新集合 destination 中
sunionstore destination key [key ...] 取并集,并将结果存入新集合 destination 中
sdiffstore destination key [key ...] 取差集,并将结果存入新集合 destination 中对象
5. 有序集合 Zset
经常使用命令:
zadd key score member [score member ...] 往有序集合 key 中添加带分值元素
zrange key start end 返回有序集合 key 中指定范围的元素,按 score 正序排列
zrevrange key start stop 返回有序集合 key 中指定范围的元素,按 score 倒序排列
zrem key member [member ...] 从有序集合 key 中删除元素
zscore key member 返回有序集合 key 中元素 member 的分值
zincrby key increment member 为有序集合 key 中元素 member 的分值加上 increment
zcard key 返回有序集合 key 中的元素的个数blog
6. 应用场景
-
对象缓存
1)set user:1 value( json 格式数据 )
2)mset user:1:name zhangsan user:1:age 23
3)hmset user 1:name zhangsan 1:age 23 -
分布式锁
setnx key true 开始执行业务前,返回1 表示获取锁成功,不然失败,
setnx key true ex 10 nx ( 10 s 后过时)
del key 业务执行完后,释放锁 -
计数器
文章阅读数统计:
新增阅读 incr article:readcount:{文章id}
获取数量 get article:readcount:{文章id} -
分布式系统全局序列号
incrby orderId 3000,redis批量生产序列号提高性能 -
抽奖
使用 set 集合 srandmember、spop -
微博共同关注人
使用 set 集合 运算 -
电商购物车
key:用户id(111),field:商品id(61234),value:商品数量 添加商品: hset shopCart:111 61234 1 添加商品数量:hincrby shopCart:111 61234 减小商品数量:hincrby shopCart:111 61234 -1 商品总数:hlen shopCart:111 删除商品:hdel shopCart:111 61234 获取购物车全部商品:hgetall shopCart:111