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、lrem:lrem key count element
将key中的element元素删除count个
6、ltrim:ltrim key start stop
截取指定范围的值后再赋值给key
7、rpoplpush:rpoplpush source destination
从source的尾部(r)出栈,然后给destination的头部(I)入栈
8、lset:lset key index element
给key的index索引位置的元素复制为element
9、linsert:linsert 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、hincrby:hincrby key field increment
给key的field字段每次增加increment(增加的是整数)
7、hincrbyfloat:hincrbyfloat key field increment
给key的field字段每次增加increment(增加的是float)
8、hsetnx:hsetnx 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]
查询score的范围在【60,90】
127.0.0.1:6379> ZRANGEBYSCORE zset01 60 90
1) "v1"
2) "v2"
3) "v3"
4) "v4"
查询score的范围在【60,90)
127.0.0.1:6379> ZRANGEBYSCORE zset01 60 (90
1) "v1"
2) "v2"
3) "v3"
查询score的范围在(60,90)
127.0.0.1:6379> ZRANGEBYSCORE zset01 (60 (90
1) "v2"
2) "v3"
查询score的范围在【60,90】并且在这个基础上从第二个位置拿取2个数据
127.0.0.1:6379> ZRANGEBYSCORE zset01 60 90 limit 2 2
1) "v3"
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对应的score
zscore key member
6、zrevrank:逆序获得member的下标值
7、zreverange:逆向打印Vzreverange key start stop[withscores]
8、zreverrangebyscore:逆向打印Vzrevrangebyscore key 结束score 开始score