常用的5种数据结构:
1)key-string(字符串 String ):一个key对应一个值(最常用的,一般用于存储一个值 )
2)key-list(列表 List ):一个key对应一个列表。(使用list结构实现栈和队列结构 )
3)key-set(集合 Set ):一个key对应一个集合。(交集,差集和并集的操作 )
4)key-zset(有序集合 sorted set ):一个key对应一个有序的集合。(排行榜,积分存储等操作 )
5)key-hash(哈希 Hash ):一个key对应一个Map。(存储一个对象数据的 )
另外三种数据结构:
1)HyperLogLog:计算近似值的。
2)GEO:地理位置。
3)BIT:一般存储的也是一个字符串,存储的是一个byte[]。
1、字符串(String)
1)set key value:设定key持有指定的字符串value,如果该key存在则进行覆盖操作,总是返回"OK"
2)get key:获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,因为get命令只能用于获取String value,如果该key不存在,返回null
3)setex key seconds value:设置key以及对应的value,还可以设置过期时间
4)setnx key value:当key不存在时,设置对应的value,当key存在时,不做任何操作
5)incr key:将指定的key的value原子性的递增1.如果该key不存在,其初始值为0,在incr之后其值为1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。
6)decr key:将指定的key的value原子性的递减1.如果该key不存在,其初始值为0,在incr之后其值为-1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。
7)incrby key increment:将指定的key的value原子性增加increment,如果该key不存在,器初始值为0,在incrby之后,该值为increment。如果该值不能转成整型,如hello则失败并返回错误信息。
8)decrby key decrement:将指定的key的value原子性减少decrement,如果该key不存在,器初始值为0,在decrby之后,该值为decrement。如果该值不能转成整型,如hello则失败并返回错误信息。
使用场景如下:
1.简单的缓存存储(最常用)
2.消息的失效性(过期时间的设置)
3.分布式锁的实现(redisson)
2、列表(List)
1)lpush key value1 value2...:在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数。
2)rpush key value1 value2…:在该list的尾部添加元素。
3)lrange key start end:获取链表中从start到end的元素的值,start、end可为负数,若为-1则表示链表尾部的元素,-2则表示倒数第二个,依次类推….
4)lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。
5)rpop key:从尾部弹出元素。
6)llen key:返回指定的key关联的链表中的元素的数量。
使用场景如下:
消息流的场景:
1.用户的id作为key,发送的消息作为value,例如:朋友圈发布,微博发布,公众号发布...
3、集合(Set,不允许出现重复的元素)
1)sadd key value1 value2…:向set中添加数据,如果该key的值已有则不会重复添加。
2)smembers key:获取set中所有的成员。
3)scard key:获取set中成员的数量。
4)sismember key member:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在。
5)srem key member1 member2… :删除set中指定的成员。
6)srandmember key:随机返回set中的一个成员。
7)spop key:随机返回set中的一个成员并从set中移除。
8)sdiff key1 key2:返回key1与key2中相差的成员,而且与key的顺序有关,即返回差集。
9)sdiffstore destination key1 key2:将key1、key2相差的成员存储在destination上。
10)sinter key[key1,key2…]:返回交集。
11)sinterstore destination key1 key2:将返回的交集存储在destination上。
12)sunion key1 key2:返回并集。
13)sunionstore destination key1 key2:将返回的并集存储在destination上
使用场景如下:
公司年会,随机抽奖小程序
1.把所有用户统一存入set集合中
2.查看所有抽奖人数
3.随机抽取指定得奖人数并从set集合中删除
实现:
1.sadd choujiang userid1,userid2,userid3...
2.smembers choujiang
3.spop choujiang [count]
微信点赞,微博收藏
1.点赞,创建集合并加入对应用户
2.取消点赞,从集合中删除对应用户
3.检查用户是否点过赞
4.获取点赞用户列表
5.获取点赞用户数量
实现:
1.sadd dianzan userid1,userid2,userid3...
2.srem dianzan userid1
3.sismember dianzan userid1
4.smembers dianzan
5.scard dianzan
查看共同好友,推荐可能认识的人
1.两个集合取交集
实现:
1.sinter user1list,user2list...
2.sinterstore list user1list,user2list...
4、有序集合(sorted set)
1)zadd key score member score2 member2 … :将所有成员以及该成员的分数存放到sorted-set中。
2)zcard key:获取集合中的成员数量。
3)zcount key min max:获取分数在[min,max]之间的成员。
4)zincrby key increment member:设置指定成员的增加的分数。
zincrby zset1 10 jack
5)zrangebyscore key min max [withscores] [limit offset count]:返回分数在[min,max]的成员并按照分数从低到高排序。[withscores]:显示分数;[limit offset count]:offset,表明从脚标为offset的元素开始并返回count个成员。
6)zrevrangebyscore key min max [withscores] [limit offset count]:上面类似(score需从大到小),从高到底排序
使用场景如下:
排行榜实现
1.对播放的视频,分数自增1
2.展示排行榜前十的视频
实现:
1.zincrby videos 1 video1id
2.zrevrangebyscore videos 100 0 withscores limit 0 10 (zrevrangebyscore从大到小排序)
5、哈希(Hash)
1)hset key field value:为指定的key设定field/value对(键值对)。
例如:hset user name zhangsan
2)hget key field:返回指定的key中的field的值。
3)hgetall key:获取key中的所有filed-vaule。
4)hlen key:获取key所包含的field的数量。
5)hincrby key field increment:设置key中filed的值增加increment
6)hdel key field [field ...]:删除key中的属性
使用场景如下:
购物车场景:
1.用户的id作为key
2.商品的id作为field(属性)
3.商品的数量作为value(属性值)
购物车操作:
1.用户添加购物车:hset cart:1001 20001 1 (id为1001的用户添加了一个id为20001的商品,数量为1个)
2.增加对应商品数量:hincrby cart:1001 20001 1
3.查询商品总数:hlen cart:1001
4.删除该用户的某个商品:hdel cart:1001 20001
5.查询该用户购物车信息:hgetall cart:1001
6、通用操作
1)keys patten:获取所有与patten匹配的key,*表示任意字符,?表示一个字符。
2)del key1 key2....:删除指定的key。
3)exists key:判断该key是否存在,1表示存在,0表示不存在。
4)expire key second:为当前key设置过期时间(单位:秒)。
5)ttl key:查看当前key剩余过期时间。
6)flushall: 删除所有key(慎用)
7)flushdb: 删除所有key(慎用)