目录

Redis的数据类型

一、String类型

String相关指令

 1、添加数据

①、set

②、mset

③、setnx

④、msetnx

⑤、setex

⑥、getset

②、获取数据

①、get

②、mget

 3、append

4、setrange

 5、getrange

6、strlen

 7、数字型value自增自减1   原子性操作

①、incr

②、decr

 8、数字型value自增自减任意数    原子性操作

①、incrby

②、decrby

二、List类型

List类型常用指令

1、插入数据

①、lpush 

 ②、rpush

2、删除数据(取出数据)

①、lpop

②、rpop

3、rpoplpush

4、lrange

5、lindex

6、llen

 7、linsert

8、lrem

9、lset

三、Set类型

1、sadd

2、smembers

3、sismember

4、scard

5、rem

6、spop

7、srandmember

 8、smove

 9、sinter

10、sunion

11、sdiff

四、Hash类型

1、hset

 2、hget

3、hexists

 4、hkeys

5、hvals 

 6、hincrby

7、hsetnx

 五、Zset类型

1、zadd 

2、zrange

3、zrangebyscore

 4、zrevrangebyscore

 5、zincrby

 6、zrem

7、zcount

 8、zrank


Redis的数据类型

一、String类型

String是Redis中最基本的数据类型,一个key对应一个value,数据结构为简单动态字符串,是可以修改的字符串,内部结构类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存分配频繁,当前字符串实际分配的空间capacity一般高于实际字符串长度len,当字符串长度小于1M时,每次扩容呈翻倍扩容,如果超过1M,扩容一次只会增加1M,最大不超过512M

String是二进制安全的,意味着Redis的String可以包含任何数据,比如jpg图片,或者序列化的对象。

String相关指令

 1、添加数据

①、set

set key value   --设置相同的key变为更新

redis 自减 redis自增自减_数据库

②、mset

mset key1 value1 key2 value2........  --同时设置多个key value

redis 自减 redis自增自减_Redis_02

③、setnx

setnx key value    --当不存在key时才设置

redis 自减 redis自增自减_redis_03

④、msetnx

msetnx key1 value1 key2 value2 key3 value3 ......            --同时设置多个key value,仅当key不存在时才可添加,原子性操作,当一个key设置失败,其他都失败

redis 自减 redis自增自减_数据库_04

⑤、setex

setex key second value  --添加数据同时设置过期时间

redis 自减 redis自增自减_数据库_05

⑥、getset

getset key value  --获取值同时替换新值

redis 自减 redis自增自减_Redis_06

②、获取数据

①、get

get key

redis 自减 redis自增自减_数据结构_07

②、mget

mget key1 key2 key3             --同时获取多个值

redis 自减 redis自增自减_List_08

 3、append

append key         --追加value

redis 自减 redis自增自减_数据结构_09

4、setrange

setrange key  起始位置      --复写部分value

redis 自减 redis自增自减_Redis_10

 5、getrange

getrange key 起始位置 结束位置          --截取部分value

redis 自减 redis自增自减_Redis_11

6、strlen

strlen key     --得到String的长度

redis 自减 redis自增自减_List_12

 7、数字型value自增自减1   原子性操作

①、incr

incr key   自增1

redis 自减 redis自增自减_数据库_13

②、decr

decr key  自减1

redis 自减 redis自增自减_redis_14

 8、数字型value自增自减任意数    原子性操作

①、incrby

incrby key 步长       增长20

redis 自减 redis自增自减_redis_15

②、decrby

decrby key  步长       减少20

redis 自减 redis自增自减_数据库_16

二、List类型

List类型属于一键多值类型,Redis的列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边),或者尾部(右边)

它的底层是个双向链表,对两端的操作性能很高,但是通过索引下标的操作中间节点的性能会比较差

List类型常用指令

List的数据结构为快速链表QuickList,首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是Ziplist(压缩列表),它将所有元素紧挨着一起存储,分配的是一块连续的内存,当数据量比较多的时候才会改成Quicklist,因为普通的链表需要附加指针空间太大,浪费空间。比如一列表里只存int类型的数据,结构上还需要两个额外的指针prev和next。Redis将链表和Ziplist结合起来成了QuickList,也就是将多个Ziplist使用双向指针串起来。

redis 自减 redis自增自减_数据结构_17

1、插入数据

①、lpush 

lpush key value1 value2 value3 ....      --从左边插入,插入的结果为 value3 value2 value1

redis 自减 redis自增自减_数据库_18

 ②、rpush

rpush key value1 value2 value3 ....      --从右边插入,插入的结果为 value1 value2 value3

redis 自减 redis自增自减_数据结构_19

2、删除数据(取出数据)

①、lpop

lpop key      --从左边弹出一个值,value就会把这个值去掉,当所有值弹出去时,key不存在

redis 自减 redis自增自减_List_20

②、rpop

rpop key   --从右边弹出一个值,value就会把这个值去掉,当所有值弹出去时,key不存在

redis 自减 redis自增自减_List_21

3、rpoplpush

rpoplpush  key1 key2     --从key1右边取一个值放到key2的左边

 

redis 自减 redis自增自减_数据结构_22

4、lrange

lrange key 起始坐标 结束坐标       --从左开始获取list的坐标范围内的值,0到-1表示获取所有值

5、lindex

lindex key  index   --从左边开始按照下表获取值

redis 自减 redis自增自减_List_23

6、llen

llen key    --获取链表的长度

redis 自减 redis自增自减_redis_24

 7、linsert

linsert key  before|after  ”目标值“  ”插入的值“      --在目标值后面或者前面插入一个值

redis 自减 redis自增自减_Redis_25

8、lrem

lrem key  个数  ”目标值“    -- 从左边开始删除n个目标值

redis 自减 redis自增自减_数据库_26

9、lset

lset key index ”替换值“   --从左边开始替换指定下标的value值

redis 自减 redis自增自减_数据结构_27

三、Set类型

Redis Set 对外提供的功能与list类似,是一个列表的功能,特殊之处在于set是可以自动排重的,并且Set提供了一个判断成员是否存在一个set集合的重要接口,是list所没有的,Redis Set是String类型的无序集合,底层其实就是value为null的hash表,所以添加、删除、查找的复杂度都是0(1)

Redis Set数据结构是一个Dict字典,字典使用哈希表实现的,所有的value都指向一个内部值

1、sadd

sadd key  value1 value2 value3    --将多个元素添加到集合key中,如果元素存在则自动忽略

redis 自减 redis自增自减_数据结构_28

2、smembers

smembers key   --从集合中获取所有元素,不删除

 

redis 自减 redis自增自减_数据结构_29

3、sismember

sismember key value    --查询集合中是否存在value元素

redis 自减 redis自增自减_数据结构_30

4、scard

scard key    --返回集合中的元素个数

redis 自减 redis自增自减_redis_31

5、rem

srem key  value    --从集合中删除value元素

redis 自减 redis自增自减_数据结构_32

6、spop

spop key    --随机从集合中吐出(删除)一个元素,当集合中的元素都被吐出,集合就不存在了

 

redis 自减 redis自增自减_List_33

7、srandmember

srandmember key  数量      --从集合中随机获取n个元素,不会删除元素

redis 自减 redis自增自减_数据结构_34

 8、smove

smove key1 key2  value     --将value元素从set集合key1移动到set集合key2 中

redis 自减 redis自增自减_数据库_35

 9、sinter

sinter key1 key2     --求两集合中的交集

redis 自减 redis自增自减_Redis_36

10、sunion

sunion key1 key2     --求两集合的并集

redis 自减 redis自增自减_数据结构_37

11、sdiff

sdiff key1 key2     --求两集合的差集

redis 自减 redis自增自减_数据结构_38

四、Hash类型

Redis Hash是一个键值对集合,值是一个field和value的映射表,Hash特别适合用来存储对象,类似java里面的Map <String,Object>。例如存储一个user对象,key是user   value可以是{id :1 ,name: zhangsan , age:18}

Redis Hash 类型对应的数据结构有两种,ZipList,Hashtable,当field-value长度较短且个数较少的时候使用ZipList,否则使用Hashtable

1、hset

hset  key1  field1  value1   key2   field2  value2  key3   field3  value3 .....   --添加数据

redis 自减 redis自增自减_数据库_39

 

redis 自减 redis自增自减_Redis_40

 2、hget

hget key field      --获取key中某个属性的值

redis 自减 redis自增自减_Redis_41

3、hexists

hexists  key   field     判断key中某个属性是否存在

redis 自减 redis自增自减_数据结构_42

 

 4、hkeys

hkeys  key     列出该集合中所有的field

redis 自减 redis自增自减_数据库_43

5、hvals 

hvals key  查改该集合中所有的value

redis 自减 redis自增自减_List_44

 6、hincrby

hincrby key field n    --集合中某个和属性自增n

redis 自减 redis自增自减_redis_45

7、hsetnx

hsetnx key field value   添加一个值,仅当该值不存在时才能添加成功

redis 自减 redis自增自减_redis_46

 五、Zset类型

Redis有序集合Zset与普通集合非常相似,是一个没有重复元素的集合,不同之处是有序集合的每个成员都关联了一个评分(score),这个评分被用来按照从低分到最高分的方式排序集合中的成员,集合成员是唯一的,但是评分是可以重复的。

Zset使用了两个数据结构,Hash以及跳跃表.

1、zadd 

zadd key score value  score1 value1 score2 value2.....   --添加数据

redis 自减 redis自增自减_redis_47

2、zrange

zrange key 起始下标 结束下标   withscores     --查询下标范围内的值,携带分数

 

redis 自减 redis自增自减_数据结构_48

3、zrangebyscore

zrangebyscore key min  max   whithscores       --按照分数进行排序,返回携带分数

redis 自减 redis自增自减_Redis_49

 4、zrevrangebyscore

zrevrangebyscore key max  min  withcores           --按照范围内分数从大到小排序

redis 自减 redis自增自减_redis_50

 5、zincrby

zincrby key n  value           将key集合中的value的分数增大n

redis 自减 redis自增自减_redis_51

 6、zrem

zrem key value    删除集合中的某个元素

redis 自减 redis自增自减_List_52

7、zcount

zcount key min max             --查询在分数区间内共有几个元素

redis 自减 redis自增自减_List_53

 

 8、zrank

zrank key value     --查询集合中某个元素的排名

redis 自减 redis自增自减_redis_54