Redis的五大数据类型

String(字符串)

  • string是redis最基本的类型,可以理解为Memcached一样的类型,一个key对应一个value。
  • string类型是二进制安全的,意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
  • string类型是Redis最基本的数据结构,一个redis中字符串value最多可以是512M。

Hash(哈希,类似于java里的Map)

  • Redis hash是一个键值对集合
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 类似java里面的Map

List(列表,底层是链表)

  • Redis列表是简单的字符串列表,按照插入顺序排序。
  • 可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  • 它的底层是一个链表。

Set(集合)

  • Redis的Set是string类型的无序集合。它是通过HashTable实现的。

Zset(sorted set:有序集合)

  • Redis zset和set一样也是string类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联一个double类型的分数
  • redis正是通过分数来为集合中的成员进行从小到大排序
  • zset的成员是唯一的,但分数(score)却可以重复

redis常用的数据类型操作命令

https://www.redis.net.cn/order/

详细的还是得看官网

Redis键(key)

单值value

常用命令:

1、set:设置值

2、get:获取值

3、del:删除值

4、append:类似于StringBuilder的append

5、strlen:返回String的长度

##(一定是数字才能进行加减)

6、incr:对当前key的数据进行加一操作

7、decr:对当前key的数据进行减一的操作

8、incrby:对当前的key的数据进行加值操作,这个值可以指定。

9、decrby:对当前的key的数据进行减值操作,这个值可以指定

10、getrange:获取指定区间范围内的值,类似between….and的关系。

11、setrange:设置指定区间范围内的值,格式是setrange key值,具体值。setrange key offset value

12、setex:设置过期时间(set with expire)setex key seconds value

13、setnx:如果键不存在才设置(set if not exist)setnx key value

14、mset/mget:批量设置/获取

15、msetnx:批量的setnx

16、type key:查询key的类型

Redis字符串(String)

单值单value

常用命令

1、set:设置值

2、get:获取值

3、del:删除值

4、append:类似于StringBuilder的append

5、strlen:返回String的长度

6、incr:对当前key的数据进行加一操作

7、decr:对当前key的数据进行减一的操作

8、incrby:对当前的key的数据进行加值操作,这个值可以指定。

9、decrby:对当前的key的数据进行减值操作,这个值可以指定

10、getrange:获取指定区间范围内的值,类似between….and的关系。

11、setrange:设置指定区间范围内的值,格式是setrange key值,具体值。setrange key offset value

12、setex:设置过期时间(set with expire)setex key seconds value

13、setnx:如果键不存在才设置(set if not exist)setnx key value

14、mset/mget:批量设置/获取

15、msetnx:批量的setnx

16、type key:查询key的类型

17、ttl key:查询过期时间

18、getset:先获取值,然后写入一个新的值

Redis列表(List)

单值多value

常用命令

1、lpush/rpush/lrange

  • LPUSH:正进反出;吃吐了(栈);从左边压栈,
  • RPUSH:正进正出;拉屎(队列);从右边压栈
  • LRANGE:读取list数据;从左边开始读数据

2、lpop/rpop

  • LPOP:从左边开始出栈(返回数据并且删除)
  • RPOP:从右边开始出栈(返回数据并且删除)

3、lindex

  • lindex key index:按照索引获取元素

4、llen:获取list的长度

5、lremlrem key count element将key中的element元素删除count个

6、ltrimltrim key start stop截取指定范围的值后再赋值给key

7、rpoplpushrpoplpush source destination从source的尾部(r)出栈,然后给destination的头部(I)入栈

8、lsetlset key index element给key的index索引位置的元素复制为element

9、linsertlinsert key before|after privot element在key中的pivot元素之前/之后插入元素element

性能总结

1、list是一个字符链表,left、right都可以插入添加

2、如果键不存在,创建新的链表

3、如果键已经存在,增加内容

4、如果值全移除,对应的键也就消失了。

5、链表的操作无论是头和尾的效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

Redis集合(Set)

单值多value

常用命令

1、sadd/smembers/sismember

  • sadd:向key中添加members,并且不能重复(就算你重复,我也只给你添加一个)
  • smembers:获取key中的成员
  • sismember:判断key中是否存在member

2、scard:获取集合里面的元素个数

3、srem key value:删除集合中的元素

4、srandmember key count:找出key中的count个随机数

5、spop:随机出栈

6、smove:在key1里面的某个值,作用是将key1里面的某个值赋值给key2

7、数学集合:

  • 差集:sdiff key [key ...]在第一个key中,不在后面的几个key中的元素
  • 交集:sinter key [key]在前面一个中并且在后面的数据的集合
  • 并集:sunion key [key]所有key的集合

Redis哈希(hash)

KV 模式不变,但是V是一个键值对集合

常用命令

1、hset/hget/hmset/hgetall/hdel

  • hset:设置hash属性
  • hget:设置key的field值
  • hmset:设置值
  • hgetall:获取当前所有key的数据
  • hdel:删除元素hdel key field [field ...]

2、hlen:返回key中键值对的数量

3、hexists:key中是否存在field属性

4、hkeys:获取所有的键

5、hvals:获取所有的值

6、hincrbyhincrby key field increment给key的field字段每次增加increment(增加的是整数)

7、hincrbyfloathincrbyfloat key field increment给key的field字段每次增加increment(增加的是float)

8、hsetnxhsetnx key field value给hash中的key的field属性设为value,如果存在则不能加入,不存在才能加入。

Redis有序集合Zset(sorted set)

Zset和Set的区别就是:在set的基础上加上一个score值,之前set是k1 v1 v2 v3 ,现在zset是k1 score v1 score v2

常用命令

1、zadd/arange

  • zadd给zset中添加元素
  • zrange获取值,如果携带withscores,name就携带score

2、zrangebyscore key min max [withscores] [limit offset count]

  1. 查询score的范围在【60,90
  2. 127.0.0.1:6379> ZRANGEBYSCORE zset01 60 90
  3. 1) "v1"
  4. 2) "v2"
  5. 3) "v3"
  6. 4) "v4"
  7. 查询score的范围在【60,90
  8. 127.0.0.1:6379> ZRANGEBYSCORE zset01 60 (90
  9. 1) "v1"
  10. 2) "v2"
  11. 3) "v3"
  12. 查询score的范围在(60,90
  13. 127.0.0.1:6379> ZRANGEBYSCORE zset01 (60 (90
  14. 1) "v2"
  15. 2) "v3"
  16. 查询score的范围在【60,90】并且在这个基础上从第二个位置拿取2个数据
  17. 127.0.0.1:6379> ZRANGEBYSCORE zset01 60 90 limit 2 2
  18. 1) "v3"
  19. 2) "v4"

3、zrem:删除元素

4、zcard/zcount

  • zcard:返回key中的v的数量(就是有几个键值对)
  • zcount:返回key的min与max之间的(score — v)数量

5、zrank/zscore

  • zrank:返回key中member的下标zrank key member
  • zscore:返回key中member对应的scorezscore key member

6、zrevrank:逆序获得member的下标值

7、zreverange:逆向打印Vzreverange key start stop[withscores]

8、zreverrangebyscore:逆向打印Vzrevrangebyscore key 结束score 开始score