【redis学习之二】Redis数据结构&&常用命令&&使用场景

String

    在redis内部实现为SDS(simple dynamic string),为键值对类型,通过set key value 可以实现memcached的键值对缓存功能。亦可将对象序列化或转化为json后通过key-value形式存储。但是注意由于redis的单线程模型,若是value太大,单个string的读取将会缓慢,影响redis服务器效率,value的网络传输及在程序中反序列化也是一笔不小的开销

使用场景:

①key-value型缓存;②利用incr key实现原子计数器功能;③全局限流,亦是利用计数功能;④利用setnx实现分布式锁

基本操作命令:

set key value设置指定key值get key获得指定key的value
getrange key start end返回 key 中字符串值的子字符getset key value设置制定key值,并返回value旧值
mget key1 key2 ...一次获取多个key的valuesetex key seconds value将value关联到key,并设置若干seconds后过期
setnx key valueset if not exists,key不存在时则设置strlen key返回value的字符串长度
mset key value key value一次设置多个key-value对msetnx key value key value一次设置多个key-value(若key-value不存在)
psetnx key miliseconds value将value关联到key,并设置若干毫秒后过期incr key对数字型value+1
incrby key increment对数字型value+incrementdecr key 对数字型value-1
decrby key decrement对数字型value-decrementappend key value对string型value后边拼接value
    
    

Hash

    可理解为java中的hashMap,特别适合存储对象。底层实现可以为zipList、Dict,包含key-value对较少时为ziplist实现,ziplist是一种压缩链表,采用一块连续内存存储,减少了内存碎片,在数据量不是很大的时候,遍历zipList去找目标键值对。可在redis-conf中设置当hash多大时需转换成Dict结构

使用场景:

①分布式系统中存储共享session ②保存对象类缓存,例如用户信息

基本操作命令:

hdel key field删除hash中某个key-value对hexists key field查看hash中某key是否存在
hget key field获取hash中某key的valuehgetall key获取hash中所有的key-value
hincrby key field increment对hash中某key的value+incrementhkeys key获取hash表中所有的key
hlen key获取hash中的key的数量hmget key field field获取多个key的值
hmset key filed value field value添加多个键值对hset key field value添加键值对
hsetnx keyfield value若不存在则添加相应键值对hvals key获取所有value
    

List

    即为链表,可以对链表两端进行插入、弹出操作,也可以根据索引下标获取某个区间的元素。它是有序的,也允许有重复的元素

使用场景:

①利用lpush+brpop实现生产者消费者阻塞队列,生产者通过lpush从链表左侧插入元素,消费者通过brpop从链表右端获取元素,若是链表为空则堵塞

②lpush+lpop =stack栈 ;lpush+rpop =queue队列

基本操作命令:

blpop key timeout 移除并获取左端第一个元素,若无元素则阻塞直至超时brpop key timeout移除并获取右端第一个元素,若无元素则阻塞直至超时
lindex key index获取链表中下标为index的元素linsert key before|after pivot valut在某元素前/后插入元素
llen key获取链表元素个数lpop key value弹出左端第一个元素
lpush key value 往左端插入一个元素lpushx key value覆盖左端第一个元素
lrange key start stop获取从start到stop下标的元素lrem key value移除某元素
lset key index value通过下标设置某元素值rpop key弹出右端第一个元素
rpoplpush key destination将右端第一个元素移除并添加至destinationlian链表  

Set

    与list不同的是它是无序的,且不允许有重复元素,不可以通过下标获取元素,但支持取交集、并集、差集

应用场景:

①社交场景中求共同好友,共同爱好、可能认识的好友(差集)等

②需要标签的场景,通过标签做推荐

sadd key member1 member2向集合中添加元素scard key获取集合中元素个数
sdiff key1 key2求集合差集sdiffstore des key1 key2获取集合差集放在des集合中
sinter key1 key2求集合交集sinterstore des key1 key2获取集合交集放入des集合中
sismember key member查看集合中是否存在该元素smembers key列出所有元素
spop key随机移除并返回一个元素srandmember key count返回一个或多个随机元素
srem key member1 member2移除一个或多个元素sunion key1 key2返回并集
sunionstore des key1 key2将并集放入des  
ZSet

      基于dict与skipList实现的有序集合,与set一样不允许有重复元素,但是它是有序的,给每个元素设置了一个score,按score排序,score可以重复。skiplist实现可以快速根据score定位到元素甚至是根据score范围查询,而skiplist本质为多层有序链表,查找时间复杂度为logN,最下层链维护了反向链接,支持倒序。

使用场景:

①排行榜、访问量排名、播放量排名等需要排序的场景

常用命令:

zadd key score member1 score member2添加一个或多个元素并设置分值zcard key查询元素总数
zcount key min max查询在某分数区间的元素个数zincrby key member increment为某元素分数+increment
zinterstore des key1 key2计算交集并赋给deszlexcount key min max   在有序集合中计算指定dict间成员数量
zrange key start stop返回指定索引区间元素zrangebylex key min max返回指定元素区间的成员元素
zrangebyscore key start stop返回指定分数区间的元素zrank key member返回元素排名
zrem key member1 member2移除元素zremrangebylex key min max移除指定dict区间元素
zremrangebyrank key start stop移除指定排名区间的元素zremrangebyscore key start stop移除指定分数区间的元素
zrevrangeby score key start stop返回指定分数区间元素zscore key member返回元素分数
zunionstore des key1 key2将并集放入des  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值