五、Redis集合(set)
5.1、简介
- Redis set 对外提供的功能和List类似是一个列表功能,set可以自动排重
- Redis set是string类型的无序集合添加、删除、查找的复杂度都是O(1)
5.2、常用命令
- sadd 将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略
- smembers 取出该集合的所有值
- sismember 判断集合是否含有该值,有1,没有0
- scard 返回该集合的元素个数
- srem...删除集合中的某个元素。
- spop随机从该集合中吐出一个值。
- srandmember随机从该集合中取出n个值,不会从集合中删除
- smove value把集合中一个值从一个集合移动到另一个集合
- sinter 返回两个集合的交集元素
- sunion返回两个元素的并集元素
- sdiff返回两个集合的差集元素(key1中的,不包含key2中的)
简单测试
127.0.0.1:6379> sadd set "hello" # 向set集合中添加元素
(integer) 1
127.0.0.1:6379> sadd set "chen"
(integer) 1
127.0.0.1:6379> sadd set "world"
(integer) 1
127.0.0.1:6379> SMEMBERS set # 查看指定set的所有值
1) "world"
2) "chen"
3) "hello"
127.0.0.1:6379> SISMEMBER set hello # 判断某一个元素是否在set中,返回1代表存在,返回0代表不存在
(integer) 1
127.0.0.1:6379> SISMEMBER set world!
(integer) 0
127.0.0.1:6379> SCARD set # 获取set集合中的元素个数
(integer) 3
127.0.0.1:6379> SREM set world # 移除set集合中的指定的元素
(integer) 1
127.0.0.1:6379> SCARD set
(integer) 2
127.0.0.1:6379> SMEMBERS set
1) "chen"
2) "hello"
127.0.0.1:6379> SRANDMEMBER set # 随机抽选出某一个元素[也可以是指定的个数]
"hello"
127.0.0.1:6379> SRANDMEMBER set
"chen"
127.0.0.1:6379> SPOP set # 随机删除一些set集合里的元素
"hello"
127.0.0.1:6379> SADD set hello world chen
(integer) 3
127.0.0.1:6379> SADD set1 hello
(integer) 1
127.0.0.1:6379> SMOVE set set1 world # 将指定的元素从一个集合移动到另外一个集合中去
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "chen"
2) "hello"
127.0.0.1:6379> SMEMBERS set1
1) "world"
2) "hello"
数字集合类:
- 差集
- 交集
- 并集
127.0.0.1:6379> SADD key1 a
(integer) 1
127.0.0.1:6379> SADD key1 b
(integer) 1
127.0.0.1:6379> SADD key1 c
(integer) 1
127.0.0.1:6379> SADD key2 d
(integer) 1
127.0.0.1:6379> SADD key2 c
(integer) 1
127.0.0.1:6379> SADD key2 e
(integer) 1
127.0.0.1:6379> SDIFF key1 key2 # 差集
1) "b"
2) "a"
127.0.0.1:6379> SINTER key1 key2 # 交集
1) "c"
127.0.0.1:6379> SUNION key1 key2 # 并集
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
六、Redis 哈希(Hash)
6.1、简介
redis hash 是一个键值对集合,是一个string类型的field和value的映射表,hash特别适合储存对象
6.2、常用命令
- hset 给集合的filed赋值i
- hget 从key1>集合取出
- hmset 批量设置hash的值
- hexists 查看哈希表key中,给定域filed是否存在。
- hkeys 列出该hash集合的所有field
- hvals 列出该hash集合的所有的value
- hincrby 为哈希表key中的域field的值加上增量 1 -1
- hsetnx 将哈希表key中的域field的值设置为value,当且仅当field不存在
6.3、简单测试
127.0.0.1:6379> HSET myhash filed1 value1 # set一个具体的 key-value
(integer) 1
127.0.0.1:6379> HGET myhash filed1 # 获取一个字段值
"value1"
127.0.0.1:6379> HMSET myhash filed1 value2 filed2 value3 # set 多个key-value
OK
127.0.0.1:6379> HMGET myhash filed1 filed2 # 获取多个值
1) "value2"
2) "value3"
127.0.0.1:6379> HGETALL myhash # 获取全部的数据
1) "filed1"
2) "value2"
3) "value3"
4) "value4"
5) "filed2"
6) "value3"
127.0.0.1:6379> HDEL myhash filed2 # 删除hash指定的key字段,对应的value值也被删除了
(integer) 1
127.0.0.1:6379> HGETALL myhash
1) "filed1"
2) "value2"
3) "value3"
4) "value4"
127.0.0.1:6379> HMSET myhash filed1 hello filed2 world
OK
127.0.0.1:6379> HGETALL myhash
1) "filed1"
2) "hello"
3) "filed2"
4) "world"
127.0.0.1:6379> HLEN myhash # 获取hash表的字段数量
(integer) 2
127.0.0.1:6379> HEXISTS myhash filed1 # 判断某一个字段是否存在,返回值1代表存在,否则是不存在
(integer) 1
127.0.0.1:6379> HEXISTS myhash filed3
(integer) 0
127.0.0.1:6379> HKEYS myhash # 获取所有的filed
1) "filed1"
2) "filed2"
127.0.0.1:6379> HVALS myhash # 获取所有的value
1) "hello"
2) "world"
127.0.0.1:6379> HSET myhash f 1 # 指定增量
(integer) 1
127.0.0.1:6379> HINCRBY myhash f 1
(integer) 2
127.0.0.1:6379> HINCRBY myhash f -1
(integer) 1
七、Redis有序集合Zset
7.1、简介
Redis 有序集合zset与set 类似,是一个没有重复元素的字符串集合
与set不同的是zset是有序的,访问有序集合的中间元素也很快,因为能够使有序集合作为一个没有重复成员的智能列表
7.2、常用命令
- zadd <key\><score1\><value1\><score2\><value2\> 将一个或多个member元素及其score值加入到有序集key中
- zrange [WITHSCORES]
返回有序集合key中,下表在之间的元素,带WITHSCORES,可以让分数一起和值返回到结果集。
- zrangebyscore key minmaxwithscores
返回有序集合key中,所有score值介于min和max之间(包括min和max)的成员。按score值递增次序排列
- zrevrangebyscore key maxminwithscores 同上改为从大到小排列
- zincrby 为元素的score加上增量
- zrem 删除该集合下的,指定值的元素
- zcount 统计该集合,分数区间内的元素个数
- zrank 返回该值在集合中的排名,从0开始。
7.3、简单测试
127.0.0.1:6379> ZADD myset 1 one # 添加一个值
(integer) 1
127.0.0.1:6379> ZADD myset 2 two 3 three # 添加多个值
(integer) 2
127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZADD salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> ZADD salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> ZADD salary 3000 chen
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 显示全部的用户 从小到大
1) "xiaohong"
2) "chen"
3) "zhangsan"
127.0.0.1:6379> ZREVRANGE salary 0 -1 # 显示全部的用户 从大到小
1) "zhangsan"
2) "xiaohong"
127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf withscores # 显示全部用户并且附带成绩
1) "xiaohong"
2) "2500"
3) "chen"
4) "3000"
5) "zhangsan"
6) "5000"
127.0.0.1:6379> ZREM salary chen # 移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1 # 获取有序集合中的个数
1) "xiaohong"
2) "zhangsan"
127.0.0.1:6379> ZADD myset 1 hello 2 world 3 chen
(integer) 3
127.0.0.1:6379> ZCOUNT myset 1 2 # 获取指定区间中的成员数量
(integer) 2
127.0.0.1:6379> ZCOUNT myset 1 3
(integer) 3
127.0.0.1:6379>