redis--数据类型
redis支持五种数据类型:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)
string(字符串)
string时redis最基本的类型,一个key对应一个value
string类型是二进制安全的,也就是redis可以包含任何数据。比如jpg图片或者序列化的对象
string是redis最基本的数据类型,string类型的值最大能存储512MB
127.0.0.1:6379> set runood 'william林涛' OK 127.0.0.1:6379> get runood william林涛 127.0.0.1:6379>
调用了redis的set和get命令。这里面的键是runood,对应的值就是‘runood’
redis字符串命令:
1 |
set key value 设置指定key的值 |
2 |
get key 获取指定key值 |
3 |
getrange key start end 返回key中字符串值的字节符 |
4 |
getset key value 将给定key的值设为value,并返回key的旧值(old value) |
5 |
getbit key offset 对key所存储的字符串值,获取指定偏移量上的位(bit) |
6 |
mget key1[key2...] 获取所有(一个或者多个)给定key的值 |
7 |
setbit key offset value 对key所存储的字符串值,设置或清除指定偏移量上的位(bit) |
8 |
setex key seconds value 将值value关联到key,并将key的过期时间设为seconds(以秒位单位) |
9 |
setnx key value 只有key不存在时设置key的值 |
10 |
setrange key offset value 用value 参数赋写给定key所存储的字符串值,从偏移量offset开始 |
11 |
strlen key 返回key所存储的字符串值的长度 |
12 |
mset key value [key value...] 同时设置一个或多个key-value对 |
13 |
msetnx key value [key value...] 同时设置一个或者多个key-value对,当且仅当所有给定key都不存在 |
14 |
psetex key milliseconds value 以毫秒位单位设置key的生存时间,而不是像setex命令那样,以秒为单位 |
15 |
incr key 将key中储存的数字增量加一 |
16 |
incrby key increment 将key所存储的值加上给定的增量值(increment) |
17 |
incrbyfloat key increment 将key所储存的值加上给定的浮点增量值 |
18 |
desc key 将key中储存的数字值减一 |
19 |
desrby key descrement key所储存的值减去给定的减量值(descrement) |
20 |
append key value 如果key已经存在并且是一个字符串,append命令将指定的value追加到该key原来值(value)的末尾 |
hash(哈希)
redis hash是一个键值对集合
redis hash是一个string类型的field和value的映射表,hash适合用于存储对象
当你再次使用之前使用过的runood的时候因为你已经使用过了,所以需要先将之前的key删掉
127.0.0.1:6379> del runood 1
127.0.0.1:6379> hmset runood field1 'hello' field2 'world' OK 127.0.0.1:6379> hget runood field1 hello 127.0.0.1:6379> hget runood field2 world 127.0.0.1:6379>
这里面用到了redis的hmset和hget命令,hmset设置了两个field=>value对,hget获取相应的field对应的value
每个hash可以存储 232 -1 键值对(40多亿)。
redis hash命令
更多命令:https://redis.io/commands
list(列表)
redis列表是简单的字符串列表,按照插入的顺序排序。你可以选择添加一个元素到列表的头部(左边)或者尾部(右边)。
127.0.0.1:6379> del runood 1 127.0.0.1:6379> lpush runood redis 1 127.0.0.1:6379> lpush runood mongodb 2 127.0.0.1:6379> lpush runood mysql 3 127.0.0.1:6379> lrange runood 0 10 mysql mongodb redis 127.0.0.1:6379>
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
redis列表命令:
Set(集合)
redis的set是string类型的无序集合
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
sadd命令
添加一个string元素到key对应的set集合中,成功就返回1,如果元素已经在集合中就返回0
sadd key member
127.0.0.1:6379> del runood 1 127.0.0.1:6379> sadd runood redis 1 127.0.0.1:6379> sadd runood mongodb 1 127.0.0.1:6379> sadd runood mysql 1 127.0.0.1:6379> sadd runood redis 0 127.0.0.1:6379> smembers runood mysql mongodb redis 127.0.0.1:6379>
在上面的例子中redis添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
redis集合(Set)
zset(sorted set:有序集合)
redis zset和set一样也是string类型元素的集合,且不允许重复的成员
不同的是每个元素都会关联一个double类型的分数,redis正式通过分数来为集合中的成员进行从小到大的排序
zset的成员是唯一的,但分数(score)却可以重复
zadd命令:添加元素到集合,元素在集合中存在的话就更新对应的分数(score)
zadd key score member
127.0.0.1:6379> del runood 1 127.0.0.1:6379> zadd runood 0 redis 1 127.0.0.1:6379> zadd runood 0 mongodb 1 127.0.0.1:6379> zadd runood 0 mysql 1 127.0.0.1:6379> zadd runood 0 redis 0 127.0.0.1:6379> zrangebyscore runood 0 10 mongodb mysql redis 127.0.0.1:6379>
redis有序集合命令