redis基础:3、redis数据类型

概述

redis有这五大基本数据类型:

  • 字符串(二进制安全的)
  • 列表
  • 集合
  • 有序集合
  • 哈希

1、String(字符串)

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

2、Hash(哈希)

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

3、List(列表)

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

4、Set(集合)

Redis的Set是String类型的无序集合,它是通过HashTable实现的

5、Zset(sorted set,有序集合)

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

Redis键(key)

1、keys *查询当前数据库的所有键

2、EXISTS [key]查询当前数据库是否存在某个key

3、MOVE [key] [index]将某键值对转移到另一个数据库

4、EXPIRE [key] [seconds]给键值对设置过期时间。-1代表永不过期,-2表示已过期。ttl [key]可以用来查看键值对的过期时间。
5、DEL [key]删除键值对

6、TYPE [key]查看key所存储的值的类型

Redis字符串(String)

1、set/get/del/append/strlen [key]

  • set [key] [value]设置键值对key-value,如果key重复,则其值被覆盖
  • del [key]删除键值对
  • append [key] [str]将str追加到key所存储的字符串的后面
  • strlen [key]查看key所存储的字符串的长度

2、incr/decr/incrby/decrby

  • incr [key]加1操作。如果key不存在,则初始化为0后执行加1操作,如果key所存储的字符串不是数字的形式,报错。
  • decr [key]减1操作。其他同incr
  • incrby [key] [num]加num操作。如果key不存在,则初始化为0后再执行相应操作。如果key所存储的字符串不是数字形式,报错。
  • decrby [key] [num]减num操作。其他同incrby

3、getrange/setrange

  • getrange [key] [index1] [index2]获取指定区间范围内的值。-1代表倒数第一个,-2代表倒数第二个。另外,这个命令是左闭右闭的。
  • setrange [key] [index] [value]按范围设定值

4、setex(set with expire)/setnx(set if not exist)

  • setex [key] [time] [value]设置键值对的同时还设置了存活时间
  • setnx [key] [value]如果键值对已经存在的话就不会执行

5、mset/mget/msetnx

  • mset [key1] [value1] [key2] [value2] ...同时设置多个键值对
  • mget [key1] [key2] ...同时获取多个键值对的值
  • msetnx [key1] [value1] [key2] [value2] ...同时设置多个键值对,如果有存在的,整个不执行!!
    msetnx k8 8 k9 9,k8不存在的话这个语句会执行,最后k8的值为9.
  • getset先get,再set

Redis列表(List)

1、lpush/rpush/lrange

  • lpush [key] [value1] [value2] [value3] ...从左端往列表中插入值
  • rpush [key] [value1] [value2] [value3] ...从右端往列表中插入值
  • lrange [key] [index1] [index2]查看列表中相应位置范围的value

2、lpop/rpop

  • lpop [key]列表左端弹出一个value
  • rpop [key]列表右端弹出一个value

3、lindex

  • lindex [key] [index]获得列表指定位置的值

4、llen

  • llen [key]获得列表的长度

5、lrem

  • lrem [key] [n] [value]删除n个value

6、ltrim

  • ltrim key [index1] [index2]截取指定范围内的值再赋值给key

7、rpoplpush

  • rpoppush [key1] [key2]key1、key2可以相同,这样相当于做了循环操作

8、lset

  • lset key index value设置列表的某个下标的值

9、linsert

  • linsert [key] [before/after] [value1] [value2]在value1的前/后插入value2,如果列表中有多个value,则只对第一个value进行操作。

小结:

  1. redis列表是一个字符串链表,left,right都可以插入和添加
  2. 如果键不存在,创建新的链表
  3. 如果键已存在,新增内容
  4. 如果值全移除,对应的键也就消失了
  5. 链表的操作无论是头还是尾效率都极高,但假如是对中间元素进行操作,就会比较慢了。

Redis集合(Set)

1、sadd/smembers/sismember

  • sadd [key] [value1] [value2] [value3] ...重复的元素不会添加进去
  • smembers [key]查看集合中的所有元素
  • sismembers [key] [value]查看value值在不在集合中

2、scard

  • scard [key]获取集合中的元素个数

3、srem

  • srem [key] [value1] [value1] [value3] ...删除集合中的元素

4、srandmember

  • srandmember [key] [n]从集合中随机出几个数

5、spop

  • spop key随机从集合中弹出一个元素

6、smove

  • smove key1 key2 value1将集合1中的某个元素转移到集合2

7、数学集合类:sdiff/sinter/sunion

  • sdiff [key1] [key2]返回集合1中有,而集合2中没有的元素
  • sinter [key1] [key2]返回集合1和集合2的交集
  • sunion [key1] [key2]返回集合1和集合2的并集

Redis哈希(Hash)(重要!!!)

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

1、hset/hget/hmset/hmget/hgetall/hdel

  • hset [key] [k1] [v1]在key中设置键值对k1-v1
  • hget [key] [k1]获取key哈希表中k1的值
  • hmset [key] [k1] [v1] [k2] [v2] ...在key中设置多个键值对
  • hmget [key] [k1] [k2] ...获取key键值对中的多个值
  • hgetall [key]查看key中的所有键值对
  • hdel [key] [key1]删除key键值对中的某个键值

2、hlen

  • hlen [key]获取key中有多少个键值对

3、hexists

  • hexists [key] [key1]查看key1是否在key中

4、hkeys/hvals

  • hkeys [key]查看key中的所有键
  • hvals [key]查看key中所有值

5、hincrby/hincrbyfloat

  • hincrby [key] [key1] [n]增加value1的值,n是整数
  • hincrbyfloat [key] [key1] [f]增加value1的值,f是浮点数

6、hsetnx

  • hsetnx [key] [k1] [v1]如果k1存在,就不设置

Redis有序集合Zset(sorted set)

在set的基础上,加一个score值。之前是 k v1 v2 v3。现在是k score1 v1 score2 v2。

1、zadd/zrange/zrangebyscore

  • zadd [key] [score1] [v1] [score2] [v2] ...往有序集合中添加值
  • zrange [key] [index1] [index2]获取index1到index2范围内的值(集合中元素默认按照从小到大的顺序排列,所以0对应score分数最低的那个)。zrange [key] [index1] [index2] withscores带分数的显示
  • zrangebyscore key score1 score2选择指定分数范围内的元素
    zrangebyscore key score1 score2 withscores显示的时候会带分数
  • 如果在score1或者score2的前面加上左括号(,则代表开区间
  • 可以使用limit对结果集进行分页。zrangebyscore key score1 score2 limit 2 2对结果集分两页,取第二页的结果

2、zrem

  • zrem [key] [value1]在key中的value1元素

3、zcard

  • zcard [key]查询有序集合的元素个数

4、zcount

  • zcount [key] [score1] [score2]数出从score1到score2这个范围内的元素个数
  • 可以用左括号来代表开区间

5、zrank

  • zrank [key] [value1]查询value1在有序集合中的排名

6、zscore

  • zscore [key] [value1]查询value1的分数

7、zrevrank

  • zrevrank [key] [value1]逆序获取下标值

8、zrevrange

  • zrevrange [key] [index1] [index2]逆序获取指定范围内的元素

9、zrevrangebyscore

  • zrevrangebyscore [key] [score1] [score2]逆序获取指定分数范围的元素,注意这个时候score1要大于score2。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值