redis 数据类型string list hash set简介

 1 数据类型之 string类型:

字符串类型是redis中最基本的数据类型,它能存储任何形式的字符串,包含二进制数据,甚至是一张图片(二进制内容)。一个字符串类型的值存储的最大容量是1GB
命令

set/get
mset/mget
incr/decr/incrby/decrby/incrbyfloat
append
strlen


解释:

set/get 多次对同名的key执行set后 对应的值会被覆盖掉

mset/mget :同一命令行中对多个参数赋值和取值



incr/decr/incrby/decrby/incrbyfloat incr key :给对应的key的值增加1 decr key :给对应的key的值递减1 incrby key 5 : 给对应的key的值增加加5 decrby key 5 : 给对应的key的值增减减5 incrbyfloat key 1.01 : 给对应的key的值增加浮点数1.01 注意没有递减浮点操作 append key " world" 给key对应value后增加串 world strlen key 返回key对应的string类型值的长度

2 数据类型之 hash方式:

hash类型的值存储了字段和字段值的映射,字段值只能是字符串,不支持其他数据类型。

hash类型的键至多可以包含       2的32次方-1个字段。
hash类型适合存储对象:如图:



 

使用hash数据类型,redis可以为任何键增减字段而不影响其他键
命令
hset/hget/hmset/hmget/hgetall(hsetnx)
hexists,判断键中的属性是否存在
hincrby(hash类型没有hincr命令)
hdel
hkeys/hvals
hlen 

命令
hset/hget/hmset/hmget/hgetall(hsetnx)
hexists,判断键中的属性是否存在
hincrby(hash类型没有hincr命令)
hdel
hkeys/hvals
hlen


 

// 增加hash类型三个属性
127.0.0.1:6379> hset user:100 name zm
(integer) 1
127.0.0.1:6379> hset user:100 age 30
(integer) 1
127.0.0.1:6379> hset user:100 sex 1
(integer) 1
// 获取一个属性的值
127.0.0.1:6379> hget user:100 sex
"1"
// 同时获取多个属性的值
127.0.0.1:6379> hmget user:100 sex age
1) "1"
2) "30"
// 得到这个健下对应的所有属性和属性值
127.0.0.1:6379> hgetall user:100
1) "name"
2) "zm"
3) "age"
4) "30"
5) "sex"
6) "1"
// 判断属性是否存在
127.0.0.1:6379> hexists user:100 name
(integer) 1
// 得到所有属性
127.0.0.1:6379> hkeys user:100
1) "name"
2) "age"
3) "sex"
得到所有属性对应的数值
127.0.0.1:6379> hvals user:100
1) "zm"
2) "30"
3) "1"
// 删除属性age
127.0.0.1:6379> hdel user:100 age
(integer) 1
//  得到健下所有属性个数
127.0.0.1:6379> hlen user:100
(integer) 2

3 数据类型之list:

list是一个有序的字符串列表,列表内部实现是使用双向列表(linked list)实现的。
list还可以作为队列使用(后面讲)
一个列表类型的键最多能容纳 2的32次方-1      个元素。
命令
lpush/rpush/lpop/rpop
llen/lrange
lrem(lrem key count value)count分为三种情况
lindex/lset/ltrim/linsert
rpoplpush:将元素从一个列表转到另一个列表

lpush 向列表左侧插入数据
rpush 向列表右侧插入数据
lpush list 1
lpush list 2
rpush list 3
rpush list 4

lrange list 0 -1 查看list这个key内的所有数据

lpop 从左侧弹出并移除
rpop 从右侧弹出并移除


llen list 查询元素个数

lpush list 3 4 5 6 7 插入多条 中间用空格隔开

lrem list 2 3 从key为list的集合中 从左侧开始删除,删除2次值为3的数据

lrem list -2 3 从key为list的集合中 从右侧开始删除,删除2次值为3的数据

lrem list 0 3 从key为list的集合中 删除所有值为3的数据

lindex list 0 查询角标为0的数据

lset list 0 x 将集合list的第0个元素设置为x

ltrim list 0 2 将key名称为list的集合切割得到角标为0,1,2的三个元素

linsert list before d a 在元素d前面插入元素a

linsert list after d y  在元素d后面插入元素y

4 数据类型之set:

set集合中的数据都是不重复的,无序的,一个集合类型键可以存储至多 2的32次方-1 个字符串   
 
命令   
sadd/srem/smembers/sismember   
sdiff/sinter/sunion   
sdiffstore/sinterstore/sunionstore   
scard/srandmember/spop  


sadd set1 a

smembers set1  返回集合set1的所有元素

srem set1 a  删除集合set1的a元素

sismember set1 a  查看set1中是否有元素a

sadd set1 a b c
sadd set2 b c d

sdiff set1 set2  求集合之间的差集 以第一个参数集合作为判断标准
sinter set1 set2 求集合之间的交集
sunion set1 set2  求集合之间的并集 

sdiffstore setresult set1 set2 将集合set1 set2的差集结果存储在集合setresult中
sinterstore setresult1 set1 set2 将集合set1 set2的交集结果存储在集合setresult1中
sunionstore   setresult2 set1 set2  将集合set1 set2的并集结果存储在集合setresult2中
 
 
scard set1 返回集合个数
srandmember set1 2 每次随机从集合set1中获取2个元素
spop  set1  随机从set1中取出一个元素并移除

5 数据类型之sorted set:

有序集合,在集合类型的基础上为集合中的每个元素都关联了一个分数,这样可以很方便的获得分数最高的N个元素(topN)。



有序集合类型和列表类型的差异
相同点
(1)二者都是有序的
(2)二者都可以获得某一范围的元素
不同点
(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,当列表中元素增多后,访问中间的数据速度会很慢,所以它更加适合很少访问中间元素的应用
(2)有序集合类型是使用散列表和跳跃表(skip list)实现的,所以即使读取位于中间部分的数据速度也很快
(3)列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改这个元素的分值)
(4)有序集合要比列表类型更耗费内存




给每个元素设置分值,然后根据set元素的分值来排序,从而达到有序的目的。

 
给每个元素设置分值,然后根据set元素的分值来排序,从而达到有序的目的。

命令
zadd/zscore/zrange/zrevrange/zrangebyscore
zincrby/zcard/zcount/zrem/zremrangebyrank 根据集合中元素的排名来删除
zremrangebyscore 根据集合元素中分值范围来删除元素/zrank/zrevrank
zinterstore/zunionstore
扩展:+inf(正无穷)	-inf(负无穷)


zadd zset 20 a 向集合zset中插入元素a 分值为20
zadd zset 10 b 50 c 
zscore zset a 查看元素a的分值
zrange zset 0 1 获取zset中排名前两位的元素
zrange zset 0 -1 正序获取zset中所有的元素
zrange zset 0 -1 withscores 正序获取zset中所有的元素 并显示元素的分值
zrevrange zset 0 -1 倒序获取zset中所有的元素
zrangebyscore zset 10 20 返回包含分值在10和20区间的元素 【10,20】
zrangebyscore zset (10 20 返回包含分值在10和20区间的元素 (10,20】


zincrby zset 20 a  给集合zset的元素a在原基础上增长分值20
zcard zset 获取元素zset的个数
zcount zset 10 40 获取zset中分值在 【10,40】之间的个数
zrem zset a  删除元素a
zremrangebyscore zset 0 2 根据排名删除[0,2]三个数据
zrank zset a 返回a在集合zset中的排名
zrevrank zset a 返回a在集合zset中的倒叙的排名
zinterstore zsetersult 2 set set2 对set set2两个集合交集结果存储在集合zsetersult内 可以继续设置参数 来讲两个集合中共同元素的权值做计算和选择

zunionstore 并集结果存储在集合
 

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2190665