redis学习笔记2

来源:互联网 发布:乐乎lofte网页版 编辑:程序博客网 时间:2024/05/22 14:39
3.2 hash
特点及应用场景:方便为字段增加属性但不影响其它字段,减少冗余.
操作:
127.0.0.1:6379> hset car price 59 //设置car的price字段为59
(integer) 1
127.0.0.1:6379> hget car price     //获取car的price字段值
"59"
127.0.0.1:6379> hmset car p 1 n 2  //批量设置car的p和n字段的值
OK
127.0.0.1:6379> hmget car p n   //批量获取car的p和n字段的值
1) "1"
2) "2"
注1:在Redis中每个键都属于一个明确的数据类型,如通过HSET命令建立的键是散列类型,通过SET命令建立的键是字符串类型等。使用一种数据类型的命令操作另一种数据类型的键会提示错误:“ERR Operation against a key holding the wrong kind of value” 1 。并不是所有命令都是如此,比如SET命令可以覆盖已经存在的键而不论原来键是什么类型。
127.0.0.1:6379> hgetall car //获取键的所有字段值
1) "price"
2) "59"
3) "p"
4) "1"
5) "n"
6) "2"


127.0.0.1:6379> hexists car p//判断一个字段是否存在
(integer) 1 //存在返回1
127.0.0.1:6379> hexists car pp
(integer) 0 //不存在返回0


127.0.0.1:6379> hsetnx car id 1 //给不存在的字段设置值,当该字段存在时不做任何操作
(integer) 1


127.0.0.1:6379> hincrby person age 8//指定字段加指定数字,不存在时设置键,字段,默认初值为0
(integer) 8


127.0.0.1:6379> hdel car p n//删除字段
(integer) 2 //返回删除字段的个数


127.0.0.1:6379> hkeys car//获取字段名
1) "price"
2) "id"
127.0.0.1:6379> hvals car       //获取所有字段值
1) "59"
2) "1"
127.0.0.1:6379> hlen car//获取字段个数
(integer) 2


  3.3 list
特点及应用场景:在列表两边插入和获取数据的速度很快.可以模拟堆栈和队列操作
操作:
127.0.0.1:6379> lpush num 1 2 3 //在列表num左端插入元素1 2 3 -> [3 2 1]
(integer) 3 //返回列表元素数量
127.0.0.1:6379> rpush num 0 -1  //在列表num右端插入元素0 -1 -> [3 2 1 0 -1]
(integer) 5


127.0.0.1:6379> lpop num//从左端弹出一个元素 -> [2 1 0 -1]
"3" //返回弹出的元素值
127.0.0.1:6379> rpop num//从右边弹出一个元素 -> [2 1 0]
"-1"

127.0.0.1:6379> llen num//获取列表长度,时间复杂度为O(1)
(integer) 3 //返回列表长度




127.0.0.1:6379> lrange num 0 2  //获取左边第0到第二个列表片段
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> lrange num 0 -1 //获取从左边第一个开始到右边第一个结束的列表片段,显然可以获取整个列表
1) "2"
2) "1"
3) "0"
127.0.0.1:6379> lrange num -2 -1 //获取从右边第二个到右边第一个列表片段
1) "1"
2) "0"
127.0.0.1:6379> lrange num 1 999 //如果超出范围,则返回从左边第一个到结束的全部元素
1) "1"
2) "0"


127.0.0.1:6379> lrem num 0 2//从左边开始删除第一个值为2的元素
(integer) 1 //返回删除的元素个数
127.0.0.1:6379> lrem num -1 0//从右边开始删除第一个值为0的元素
(integer) 1


127.0.0.1:6379> lindex num 0//获取从左边开始第0个元素值
"1" //返回从该值
127.0.0.1:6379> lset num 0 2//设置左边第0个元素的值为2
OK
127.0.0.1:6379> lindex num 0
"2" //现在左边第0个元素的值被设置成2


127.0.0.1:6379> lrange num 0 -1
1) "1"
2) "0"
3) "2"
127.0.0.1:6379> ltrim num 1 2//获取从左边第一个元素到第二个元素的列表片段,删除其它元素
OK
127.0.0.1:6379> lrange num 0 -1
1) "0"
2) "2" //现在其它元素都被删除了


127.0.0.1:6379> linsert num after 0 haha//在值为0的列表元素之后(after)插入值为 haha 的元素
(integer) 3 //返回插入后列表的元素个数
127.0.0.1:6379> lrange num 0 -1
1) "0"
2) "haha"
3) "2"
127.0.0.1:6379> linsert num before 2 go//在值为2的列表元素之前(before)插入值为go的元素
(integer) 4
127.0.0.1:6379> lrange num 0 -1
1) "0"
2) "haha"
3) "go"
4) "2"


127.0.0.1:6379> lpush hh 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange hh 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> rpoplpush num hh//把num最右边的元素加入到hh的最左边
"2" //返回值是移动的元素
127.0.0.1:6379> lrange hh 0 -1//现在hh中的元素像下面所示
1) "2"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lrange num 0 -1//num中的元素像下面所示
1) "0"
2) "haha"
3) "go"


  3.4集合类型
特点及应用场景:存储不重复的值,在微博应用中,利用集合运算可以很方便的获取不同用户的共同关注,共同喜好等等
操作:
127.0.0.1:6379> sadd letters a//给集合letters中添加元素a,当该集合不存在时创建该集合
(integer) 1 //返回成功添加的元素个数
127.0.0.1:6379> sadd letters a b c//由集合的性质可知,a不会被重复添加,所以返回2
(integer) 2
127.0.0.1:6379> srem letters c d//从集合中删除元素,由于d不在集合中,不用理它
(integer) 1
127.0.0.1:6379> smembers letters//显示集合中所有的元素
1) "b"
2) "a"
127.0.0.1:6379> sismember letters a//判断该元素是否存在,真返回1
(integer) 1
127.0.0.1:6379> sismember letters d
(integer) 0 //假返回0




127.0.0.1:6379> sadd a 1 2 3
(integer) 3
127.0.0.1:6379> sadd b 2 3 4
(integer) 3
127.0.0.1:6379> sdiff a b  //x = a - b <==> x属于a但不属于b
1) "1" //返回运算后得到的集合
127.0.0.1:6379> sdiff b a
1) "4"


127.0.0.1:6379> sinter a b//求交集
1) "2"
2) "3"
127.0.0.1:6379> sunion a b//求并集
1) "1"
2) "2"
3) "3"
4) "4"


127.0.0.1:6379> scard a//获取集合中元素个数
(integer) 3
127.0.0.1:6379> sdiffstore c a b//求a-b并存储到c中,求并,求交同理
(integer) 1
127.0.0.1:6379> srandmember a 2//随机选取集合中的两个元素
1) "1"
2) "3"
127.0.0.1:6379> srandmember a 5//选取个数超过集合元素个数,则全部选中
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> srandmember a -2//选取个数是负数,选取|-2| = 2个元素,这两个元素可能相同
1) "3"
2) "2"
127.0.0.1:6379> srandmember a -2
1) "1"
2) "3"
127.0.0.1:6379> srandmember a -10
  1) "1"
  2) "2"
  3) "3"
  4) "3"
  5) "3"
  6) "1"
  7) "2"
8) "2"
  9) "2"
10) "2"
127.0.0.1:6379> spop a//随机弹出一个元素
"3"


  3.5 sorted set
特点及应用场景:可以对集合中的元素按权重排序
操作:
127.0.0.1:6379> zadd score 1 hi 2 hh//一个有序集合,hi的权值为1,hh的权值为2
(integer) 2
127.0.0.1:6379> zscore score hi//获取hi的权值
"1"
127.0.0.1:6379> zrange score 1 2//按照元素分数从小到大的顺序返回索引从1到2之间的所有元素(包
含两端的元素)
1) "hh"
127.0.0.1:6379> zrange score 0 2
1) "hi"
2) "hh"
127.0.0.1:6379> zrange score 0 2 withscores//同zrange,加上withscores表示返回元素及其对应的权值
1) "hi"
2) "1"
3) "hh"
4) "2"
127.0.0.1:6379> zrevrange score 0 2 withscores  //同zrange,只是按从小到大排序
1) "hh"
2) "2"
3) "hi"
4) "1"
127.0.0.1:6379> zrangebyscore score 0 4 withscores//按权值从小到大排序
1) "hi"
2) "1"
3) "hh"
4) "2"
127.0.0.1:6379> zrangebyscore score 0 (2 withscores//同上,只是结果中不含最右边边界元素
1) "hi"
2) "1"
127.0.0.1:6379> zrangebyscore score (0 +inf withscores//同上,只是排序所有权值大于0的元素
1) "hi"
2) "1"
3) "hh"
4) "2"
127.0.0.1:6379> zadd score 3 h3 4 h4 5 h5
(integer) 3
127.0.0.1:6379> zrange score 0 -1 withscores
1) "hi"
2) "1"
3) "hh"
4) "2"
5) "h3"
6) "3"
7) "h4"
8) "4"
9) "h5"
10) "5"
127.0.0.1:6379> zrangebyscore score 2 +inf limit 1 2   //获得权值高于2的从第一个元素开始的两个元素
1) "h3"
2) "h4"
127.0.0.1:6379> zincrby score 4 h4//给h4的权值加4
"8"

127.0.0.1:6379> zcard score//获得集合中元素的数量
(integer) 5 //返回集合中元素的数量
127.0.0.1:6379> zcount score 3 5//返回集合中权值在3-5之间的元素数量,包含端点
(integer) 2
127.0.0.1:6379> zrem score hi//删除hi元素
(integer) 1
127.0.0.1:6379> zrange score 0 -1
1) "hh"
2) "h3"
3) "h5"
4) "h4"
127.0.0.1:6379> zrange score 0 -1 withscores
1) "hh"
2) "2"
3) "h3"
4) "3"
5) "h5"
6) "5"
7) "h4"
8) "8"
127.0.0.1:6379> zremrangebyrank score 0 2//按照元素分数从小到大的顺序(即索引0表示最小的值)删除
处在指定排名范围内的所有元素
(integer) 3 //返回成功删除的个数
127.0.0.1:6379> zrange score 0 -1 withscores
1) "h4"
2) "8"
127.0.0.1:6379> zadd score 1 h1 2 h2 3 h3
(integer) 3
127.0.0.1:6379> zrange score 0 -1
1) "h1"
2) "h2"
3) "h3"
4) "h4"
127.0.0.1:6379> zremrangebyscore score 2 3//删除权值在2-3之间的元素
(integer) 2
127.0.0.1:6379> zrange score 0 -1 
1) "h1"
2) "h4"
127.0.0.1:6379> zrank score h1//获取元素h1的排名,从小到大
(integer) 0
127.0.0.1:6379> zrevrank score h1//获取元素h1的排名,从大到小
(integer) 1
127.0.0.1:6379> zadd s1 1 a 2 b
(integer) 2
127.0.0.1:6379> zadd s2 10 a 20 b
(integer) 2
127.0.0.1:6379> zinterstore res 2 s1 s2//s1,s2 求交集,元素分别相加,结果存储在res中
(integer) 2
127.0.0.1:6379> zrange res 0 -1 withscores
1) "a"
2) "11"
3) "b"
4) "22"
127.0.0.1:6379> zinterstore res 2 s1 s2 aggregate min//求交集,新集合的元素是旧集合对应相比较小的元素
(integer) 2
127.0.0.1:6379> zrange res 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
127.0.0.1:6379> zinterstore res 2 s1 s2 aggregate max//同上,只是去对应较大的元素
(integer) 2
127.0.0.1:6379> zrange res 0 -1 withscores 
1) "a"
2) "10"
3) "b"
4) "20"
127.0.0.1:6379> zinterstore res 2 s1 s2 weights 1 0.2//每个元素乘以权重再参与计算
(integer) 2
127.0.0.1:6379> zrange res 0 -1 withscores
1) "a"
2) "3"
3) "b"
4) "6"
0 0
原创粉丝点击