redis几种数据类型以及使用场景
1. string类型
string为最简单类型,一个key对应一个value
set mykey "wangzai" ##设置key,第二次赋值会直接覆盖之前的 setnx mykey "wangzai" ## 如果mykey存在,则不改变,如果不存在,则创建赋值 get mykey ##获取key的值 setex key1 10 1 ##给key1设置过期时间为10s,值为1 mset key1 value1 key2 value2 ##设置多个key mget key1 key2 ##获取多个key的值
2. list类型
list是一个链表结构,主要功能是push、pop以及获取一个范围的所有值等。
使用list结构,可以轻松实现最新消息排行,另一个应用是消息队列,可以利用list的push操作,将任务存在list中,然后工作线程再用pop操作将任务取出进行执行。(先进后出)
lpush list1 "wangzai" ##在列表中加入一个元素 lrange list1 0 -1 ##查看list1里面的所有元素 lpop list1 ##取出list1最新的元素 linsert list1 before "wangzai" "doubi" ##在值为"wangzai"的前面插入一个元素为"doubi" lset list1 3 "hehe" ##把第五个元素修改为"hehe" lindex list1 0 ##查看第一个元素 llen list1 ##查看列表中有多少元素
3. set类型
set是集合,对集合操作有添加删除元素,有对多个集合求交并差等操作。在微博应用中,可以将一个用户关注的所有人放在一个集合里,将所有粉丝放在一个集合里,因为redis为集合提供了求交集、并集、差集等操作,就可以方便的实现如共同关注、共同喜好等功能。
sadd set1 a b c d ## 创建集合set1并设置值 smembers set1 ## 查看集合set1的值 srem set1 a b ## 删除set1的值 spop set1 ## 随机取出一个元素并删除 sinter set1 set2 ## 交集 sinterstore set1 set2 set3 ## 将交集存储到set3 sunion set1 set2 ## 并集 sunionstore set1 set2 set3 ## 把并集存储到set3 sdiff set1 set2 ## 差集 sdiffstore set1 set2 set3 ## 把差集存储到set3 sismember set1 c ## 判断一个元素是否属于一个集合 srandmember set1 ## 随机取出一个元素,但不删除
4. sorted set类型
sorted set是有序集合,比set多了一个权重参数score,使得集合元素能够按score进行有序排列。
例如存储一个班级同学的成绩,其集合value可以是同学的学号,而score可以是其考试的得分,这样在数据插入集合的时候就进行了排序。
zadd zset1 1 a ## 增加一个集合zset1,score为1,member为a zrange zset1 0 -1 ## 按score升序输出member zrange zset1 0 -1 withscores ## 带上分值 zrem zset1 a ## 删除指定元素 zrank zset1 a ## 返回元素的索引值,索引从0开始 zrevrange zset1 0 -1 ## score降序输出member zcard zset1 ## 返回集合中所有元素的个数 zcount zset1 1 10 ## 返回分值范围1-10的元素个数 zrangebyscore zset1 1 10 ## 返回分值范围1-10的元素 zremrangebyscore zset1 1 10 ## 删除分值范围1-10的元素
5. hash类型
把一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值(一般为json格式),比如用户姓名、年龄、性别等
hset hash1 name wangzai ## 建立hash (hset name key value) hget hash1 name ## 获取field值 HGET name key hgetall hash1 ## 获取hash1中所有的key和value hmset hash2 name wangzai age 26 job it ## 批量建立键值对 hmget hash2 name age job ## 批量获取field值 hdel hash2 job ## 删除指定field hkeys hash2 ## 打印所有的key hvals hash2 ## 打印所有的value hlen hash2 ## 查看hash2有几个field
懂的越多,不会的也就越多,知识之路是不断进取的