1. redis的五大数据类型
- String(字符串): String 是redis最基本的数据类型,一个key对应一个value;String是二进制安全的;’redis的String可以包含任何的数据(jpg图像和序列化的对象等都可以包含);注意:一个redis中的字符串value最多可以存512M
- Hash(哈希,类似Map): redis hash是一个键值对集合;是一个String类型的field和value的映射表 ,hash适合用于存储对象;类似Java里面的Map<String,Object>
- List(列表): redis列表是简单的字符串列表,按照插入的顺序排序,可以添加一个元素到列表的头或者尾(注意:列表的底层是链表)
- Set(集合): Set是String类型的无序无重复的集合。他是通过HashTable实现的。
- Zset(sorted set: 有序集合): 和Set一样无重复集合,不同的是每个元素都会关联一个double类型的分数score;redis正式通过分数为集合中的成员进行从小到大的排序。Zset的成员是唯一的,但score却是可以重复的。
2. redis键(key)
-
keys *
: 列出所有的key -
exists key
: 判断某个key是否存在 -
move key db
:将某个key移动到某个库去,例如move hello 7
将key为hello的这个key 移动到第8号库。 -
expire key 秒钟
:为给定的key设置过期时间 -
ttl key
:查看还有多少秒过期(-1表示永不过期,-2表示已过期) -
type key
:查看key是什么类型 -
del key
:删除key
3. redis字符串(String:单值单value)
-
set key value
:设置key;
get key
:获取key;
del key
: 删除key;
append key value
: 追加;
strlen key
: 获取key的长度 -
incr key
:值为数字的value+1;
decr key
:值为数字的value-1;
incrby key 增长值
:值为数字的value+增长值;
decrby key 增长值
:值为数字的value-增长值;
注意:如果value不是数字,那么执行这四个命令将报错 - getrange:获取指定区间的字符串;如
getrange key 0 -1
: 表示获取key对应的value与get key
一样,getrange key 0 3
则是获取这个key对应的value的0-3个字符,包括第三个,也就是说输出的是4个字符;
setrange: 用来替换字符;如setrange key 0 111
: 表示从0个位置开始替换value的值,替换前三个为111。如果此key的value是qwert,那么执行了setrange key 0 111
命令以后value就变成了 111rt。 -
setex key 秒 value
: 设置key的同时为其设置过期时间;如setex abc 10 sssss
设置key为abc,value为sssss的数据过期时间为10秒钟
setnx key value
: 如果key不存在则插入key和value,如果key存在则不进行插入,防止覆盖 -
mset key1 value1 key2 value2 key3 value3 ...
批量设置key和value的值
mget key1 key2 key3...
批量获取key的值
msetnx key1 value1 key2 value2 key3 value3 ...
如果有一个key已经存在,那么这个命令将不会把数据插进去,如果key都不存在才会把所有的都插进去。
4. redis列表(List :单值多value)
lpush key value1 value2 value3 ... valuen
从左边添加(先进后出)
rpush key value1 value2 value3 ... valuen
从右边添加(先进先出)
lrange key 0 -1
将key所有的value都列出,如果是lpush的,列出的顺序应该是valuen ... value3 value2 value1;如果是rpush 的,列出的顺序将是:value1 value2 value3 ... valuenlpop key
:取栈顶的元素出栈
rpop key
:取栈底的元素出栈lindex key 下标
:按照索引的下标获取元素,从上往下获取的llen key
:获取这个key的value的长度-
lrem key n个 value
:删除list中的n个value;如lrem list1 3 ttt
就是将list1中value为ttt的删除掉3个。如下图: -
ltrime key 起始值 终止值
:将key中的value从起始值开始,到终止值结束截取出来重新赋值给key;如下图: -
rpoplpush 源list 目的list
将源list的栈底元素移动到目的list的栈顶中去,如下图: lset key index value
给index位置的值重新赋值为valuelinsert key before/after value 值
:在value前面或者后面插入一个值
5. redis集合(Set:单值多value)
-
sadd key value1 value2 value3 ... valuen
新增set集合(重复的数据会过滤掉)
smembers key
查看所有的value
sismember key value
: 在key这个集合中是否存在value这个值 -
scard key
: 获取集合里面的元素个数 -
srem key value
: 删除集合中的某个value -
srandmember key :整数n
:在key这个集合中随机的出n个value(用来抽奖) -
spop key
:随机出栈 -
smove key1 key2 key1里面的某个值
:将key1里面的某个值移到key2中去 -
sdiff key1 key2
: 获取key1和key2 的差集(在key1中并且不在key2中的值) -
sinter key1 key2
: 获取key1和key2的交集(在key1中并且又在key2中的值) -
sunion key1 key2
: 获取key1和key2的并集(在key1中或者在key2中的值)
6. redis哈希(hash:KV模式不变,但是V是一个键值对《重要》)
-
hset key field value;
:新增key下面的field下的value值
hget key field
:获取key下面的field的值
hmset key field value [file value ....]
:批量新增key下面的field的值
hmget key field [field ...]
: 批量获取多个key
hgetall key
:获取key下面的所有值
hdel key field [field ...]
:删除key下面的field,可以删除多个;如下图: -
hlen key
获取这个这个key有多少个属性 -
hexists key field
: 判断这个field是否在这个key里面 -
hkeys key
:列出key下的所有field -
hvals key
:列出key下所有的value -
hincrby key field 整数n
:给field的value增加n(只能给整数递增) -
hincrbyfloat key field 小数n
:给field的value增加小数n(只能给小数增加) -
hsetnx key field value
: 给key增加一个不存在的field,如果存在此field,将不能新增,可以防止覆盖
7. redis有序集合Zset(sorted set:在set的基础上加了一个score值)
-
zadd key score value[score value]
: 新增一个zset集合,score是排序的值 -
zrange key 0 -1
: 查询所有的value值 -
zrange key 0 -1 withscores
: 查询所有value并且携带score -
zrangebyscore key min max
: 查询score在min 和max之间的所有value,包含min和max -
zrangebyscore key (min (max
加了'('这个符号后,就是不包含 -
zrangebyscore key min max limit offset count
:表示score在min和max之前的并且从offset开始查询count条,limit相当于mysql的分页 -
zrem key value
:删除value这个元素 -
zcard key
: 统计value的个数 -
zcount key min max
:统计在min-max区间的个数 -
zrank key value
: 获得value的下标值 -
zscore key value
: 获得value的score值 -
zrevrank key value
: 逆序获得下标值 -
zrevrange key 0 -1
:逆序输出所有的value -
zrevrangebyscore key max min
:获取min-max区间的所有value并倒序输出
如下图所示: