概述
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]
列表左端弹出一个valuerpop [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进行操作。
小结:
- redis列表是一个字符串链表,left,right都可以插入和添加
- 如果键不存在,创建新的链表
- 如果键已存在,新增内容
- 如果值全移除,对应的键也就消失了
- 链表的操作无论是头还是尾效率都极高,但假如是对中间元素进行操作,就会比较慢了。
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-v1hget [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。