Redis
三、Redis数据类型
1、五大数据类型
-
string(字符串)
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的。redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
-
hash(哈希,类似java里的Map)
键值对集合
-
list(列表)
底层是链表,前后都可以加入新元素。
-
set(集合)
string类型的无序集合,底层是HashTable
-
zset(sorted set:有序集合)
string类型的有序集合,不允许重复;但每个元素会关联一个double类型的分数。redis通过分数来对集合中的成员进行从小到大排序。zset成员唯一,但分数可以重复。
操作命令:http://redisdoc.com/
2、常用命令
-
键(key)
- keys *:查询所有的键,只返回键,不返回值。
- exists key1:判断键key1是否存在,返回1表示有,0表示没有。
- move key1 2:将当前库中key1的键值对移到下标为2的库中。
- expire key1 秒:为给定的key设置过期时间,过期后通过keys *和get命令都无法查询。
- ttl key1:查看还有多少秒过期,-1表示永不过期,-2表示已过期
- type key1:查看key1是什么类型,类型会返回五大类型之一
-
string
- set key1 v1:设置键值对,若key1在数据库中已存在,则v1会覆盖之前的值。
- get key1:只返回对应的值,不返回键。没有则返回(nil)
- del key1:删除键值对,成功返回1
- append key1 v2:在之前的值后面追加字符串。返回新长度。
- strlen key1:获取对应值的长度
- incr/decr key1:只能对数字进行加减,每次只能加一。若值不是数字则会报错。
- incrby/decrby key1 num:对数字加num值。同上
- getrange key1 i j:获取指定区间范围内的值,[i,j]闭区间,若是从零到负一则表示全部。
- setrange key1 i v1:设置指定区间范围内的值,从下标为i的值开始(包括i),覆盖字符串v1。
- setex(set with expire) key1 秒 v1:创建键值对,同时设置过期时间
- setnx(set if not exist) key1 v1:不存在才创建。返回1则创建成功,返回0则创建失败(当前库已有该键)。
- mset k1 v1 k2 v2 k3 v3:同时创建多个键值对,成功返回OK
- mget k1 k2 k3:同时获取
- msetnx k1 v1 k2 v2 k3 v3:同时创建不存在的键值,多个不存在。有一个已存在则全部存不进去。
-
list
-
lpush list1 v1 v2 v3:从链表的左边依次插入,即读时逆序。返回插入值的个数。
-
rpush list1 v1 v2 v3:从链表的右边依次插入,即读时正序。
-
lrange list1 i j:读取list,i,j为读取的区间下标,闭区间。注意:list不能使用get读取。
-
lpop list1:弹出最左边元素,返回左边栈顶。
-
rpop list1:弹出最右边元素,返回右边栈顶。
-
lindex list1 i:按照索引下标获得元素,若越界返回(nil)
-
llen list:返回长度
-
lrem list1 n v1:删n个v1
-
ltrim list1 i j: 截取[i,j]中的值后再赋值给key,没有截取的部分丢掉。
-
rpoplpush list1 list2:将源列表从右边出栈一个元素放入目的列表的左边入栈。
-
lset list1 i v:设置下标为i处的值为v。替换。
-
linsert list1 before/after v1 v2:在值v1之前/之后插入v2。若v1在list1中有重复,则只会在第一个v1值前后进行操作。
-
-
set
-
sadd key1 v1 v2 v3:若输入的值中有重复,则会自动去掉重复值。
-
smembers key1:查询所有
-
sismember key1 v1:查看v1是否在集合key1里面
-
scard key1:获取集合里面的元素个数
-
srem key1 v1:删除集合中元素
-
srandmember k1 num1:num1必须是整数,从k1集合中随机获取num1个元素,不影响原集合中元素。适合红包项目。
-
spop k1:随机出栈
-
smove k1 k2 v1:v1在k1中,作用是将k1里的v1值赋给k2
-
sdiff k1 k2:差集,返回在k1中,不在k2中的元素
-
sinter k1 k2:交集,返回同时在k1和k2中的元素
-
sunion k1 k2:并集,返回k1,k2中所有元素,会去重。
-
-
hash
- hset k1 h1 v1:k1对应的值是一个键为h1,值为v1的键值对。
- hget k1 h1:获取h1对应的值
- hmset k1 h1 v1 h2 v2 h3 v3:创建k1对应的多个键值对
- hmget k1 h1 h2 h3:获取h1、h2、h3对应的值
- hgetall k1:获取k1中所有的键值对,输出格式为一个键一个值交替输出
- hdel k1 h1:删除h1及对应的值
- hlen k1:输出k1对应的键值对的数量
- hexists k1 h1: 在k1里面键h1是否存在
- hkeys k1:返回k1中所有的键
- hvals k1:返回k1中所有的值
- hincrby k1 h1 num:在h1对应的值上加整数num
- hincrbyfloat k1 h1 num:同上,加的是小数类型
- hsetnx k1 h1 v1:不存在h1才创建
-
zset
- zadd k1 s1 v1 s2 v2 s3 v3:同set中命令,不同的是在每个值前加上一个分数s
- zrange k1 i j:返回k1中下标[i,j]的值。(根据分数值从小到大排序)
- zrange k1 i j withscores:返回k1中下标[i,j]的值和分数。
- zrangebyscore k1 s1 s2:根据分数范围[s1,s2]返回对应的值,在后面加上withscore即同时能返回分数。
- zrangebyscore k1 (s1 (s2:根据分数范围(s1,s2)返回对应的值
- zrangebyscore k1 s1 s2 limit i num:在分数范围[s1,s2]返回值中取出下标i开始的前num个数,
- zrem k1 v1:删除元素
- zcard k1:统计个数,一个分数-值对只算一条数据
- zcount k1 s1 s2:统计分数之间的个数
- zrank k1 v1:获得下标值
- zscore k1 v1:获得对应的分数
- zrevrank k1 v1:逆序获得下标值
- zrevrange k1 i j:根据下标反向输出
- zrevrangebyscore k1 s2 s1:反转输出