Redis 的数据类型介绍与命令操作
@(redis)[数据类型|redis]
1. String 类型
- 二进制安全的
- 保存序列化之后的图片等
- 一个键最多存储512MB
一些命令操作
1. SET
: 设置key对应的值为value
- 语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]
- EX seconds: 设置键key的过期时间 SET key value second == SETEX
- PX milliseconds: 以毫秒的形式设置过期时间SET key value PX milliseconds == PSETEX
- NX: 只有键不存在的时候才可以设置成功 SET key value NX == SETXNX
- XX: 只有key已经存在的时候才可以设置
注意:
如果key存在, 同名会产生覆盖例子:
- SET key1 ‘this is ad test’ PX 20000
- SET key2 ‘this is ad test’ EX 100
- SET key3 ‘this is ad test’ NX
- SET key4 ‘this is ad test’ XX
-当然结合起来也是可以的, 但是如果EX和PX同是出现PX会覆盖NX
- SET key5 ‘this is a value5’ EX 100 NX
2. GET
: 根据key找到对应的值
- 语法: GET key
- 注意:
- 如果key不存在, 返回nil, 如果key不是字符串, 会报错
3.GETRANGE
获取部分值
- 语法 GETRANGE key 0 2 [-1 -2] [0 -5] [-4 2] [0 1000]
4.GETSET
设置指定的值, 并返回旧的值
- 语法: GETSET key(存在的key) value
- 注意: 当key不存在返回nil, 如果key不是字符串,会报错
5. MSET
:
- 语法: MSET key value key value [key value]
6. MGET
:MGET key1 key2 key3
7. STRLEN
计算字符串长度
- 语法:STRLEN key
- 注意:对于不存在的key获取其长度返回0
8. SETRANGE
相当于字符串替换
的效果
- 语法:SETRANGE key offset value
- 注意:如果设置的key原来的字符串长度要比偏移量小,就会以0字节(x\00)来填充
9. GETRANGE
- 语法: GETRANGE key offset value
10.EXISTS
判断一个字符串是否存在
- 语法:EXISTS key
- 注意:key 存在返回1, key 不存在返回0
11.SETNX
只有key不存在才能设置成功
- 语法: SETNX key value
- 注意: 成功返回1 失败返回0
12.SETEX
设置过期时间,多少秒
之后失效 是原子性的操作, 相当于执行了 SET key value , 又对这个key设置了过期时间 EXPIRE key seconds
- 语法: SETEX key seconds value
13.TTL
得到一个key的过期时间
- 语法: TTL key
14.EXPIRE
设置一个key的过期时间
- 语法: EXPIRE KEY 10
15.MSETNX
: 一次设置多个key-value对, 只有所有的key都不存在的时候才会成功
- 语法: MSETNX key value [key value]
16.PSETEX
: 以毫秒为单位设置key的生存周期
1 .语法: PSETEX key milliseconds value
17.PTTL
得到一个变量的毫秒生存级
周期
- 语法 PTTL key
18.KEYS *
查看当前都有那些变量
- 语法: KEYS *
19.INCR
做加法操作(increment)
- 语法: INCR key
注意:
key必须是个整数, 如果key不存在,那么key会被从1初始化, 如果key存储的不是数字会报错!
20.INCRBY
将key中存储的数字加上指定增量
- 语法: INCRBY key value
- 注意: value 必须是一个整数
21.INCRBYFLOAT
给key中存储的数字加上指定的浮点数
- 语法: INCRBYFLOAT key increment
例子:
set counter 1 -> INCRBYFLOAT counter 1.2
22.DECR
将Key中存储的数字减1
- 语法: DECR key
23.DECRBY
将Key中存储的数字减去指定的值
- 语法: DECRBY key decrement
- 实例: DECRBY counter 5 将counter减去5
24.APPEND
向key的末尾追加值
- 语法: APPEND key value
- 注意: key存在直接加入, 如果key不存在执行
SET
操作
2. Hash 类型
介绍
- 介绍: hash 是一个散列集合,
特别适合存储对象
- 在配置文件中可以通过设置
- hash-max-ziplist-entries 512 字节
- hash-max-ziplist-value 64 字段数目
Hash 相关命令
1.HSET
: 将哈希表key中域field设置成指定的value
语法
: HSET userInfo1 key value返回值
:
- 如果hash表key中field不存在, 相当于新建一个field, 设置成功返回1
- 如果hash表key中field存在, 相当于重新赋值, 成功返回0例子
:
- HSET userInfo1 username lisi
- HSET userInfo1 sex 1
- HSET userInfo1 age 25
-
2. HGET
: 获取hash表key中field字段的值
语法
: HGET userInfo1 username
2 .返回值
:
- 如果key中field不存在,返回nil
例子
:
- HGET userInfo1 username
3. HSETNX
将hash表中的field设置成指定的值, 只有在field不存在的时候才可以成功,返回1 如果field存在, 操作无效返回0
语法
: HSETNX userInfo1 field value
4. HMSET
通过将多个field-value设置到hash表key中
语法
: HMSET key field value [field value …..]
5. HMGET
一次获取多个hash表的field
语法
: HMGET key field field…..注意
: 不存在的key会返回(nil)
6. HGETALL
返回hash表中的说有的field和value
语法
: HGETALL key
7. HKEYS
返回hash表中所有的field
语法
: HKEYS key
8. HVALS
返回hash表中field对应的所有的values
语法
: HVALS key
9. HEXISTS
检查hash表key中某个field是否存在
语法
: HEXISTS key field
10. HLEN
返回hash表key中的field的数量
语法
: HLEN key
11. HINCRBY
: 给hash表key中的field做增量操作
语法
: HINCRBY key field increment(int)
12. HINCRBYFLOAT
: 给hash表key中的field做增量浮点操作
语法
: HINCRBY key field increment(float)
- HINCRBY user1 salary 1000000.56
13. HDEL
: 删除hash中key的指定域, 可以删除一个也可以删除多个
- 语法: HDEL key field field
注意:
2.4之前不支持同时删除多个
3. List 类型 (使用的双向链表)
介绍
链表是访问两边的元素速度比较快
适合场景
,比如获取新鲜事
(肯定是获取最新的新鲜事,所以查询起来就会非常的快)还有就是日志
,队列
的应用场景等
相关命令
1. LPUSH
: 向列表左端添加元素
语法:
LPUSH key value value value……注意:
1. 在2.4之前只能一次添加一个值
2. 后进先出使用:
LPUSH testList1 a b c成功返回长度
每次添加的值可以重复
2. RPUSH:
向列表右端添加元素
语法:
RPUSH key value value value……
3. LPUSHX:
只有当前列表存在的时候才执行添加(向列表头部添加元素)
语法:
LPUSHX key value value value…..注意:
- 如果key 不存在相当于什么都没做
- 如果能添加一次也只能添加一个值
- 使用
- LPUSH myList2 a
- LPUSHX myList2 b
- LRANGE myList2 0 -1
4.RPUSHX
只有当前列表存在的时候才执行添加(向列表尾部添加元素)
语法:
RPUSHX key value
5. LPOP
弹出列表的头部元素
语法:
LPOP key使用:
LPOP myList1
6. RPOP
弹出列表尾部的元素
语法:
RPOP key使用:
RPOP myList1
7. LLEN
返回列表长度
语法:
LLEN key使用:
LLEN myList1
8. LRANGE:获取列表的片段数据
语法:
LRANGE key start stop
- start , stop 支持负数
使用:
LRANGE key 0 -1
8. LREM
删除列表中指定的值
语法:
LREM key cout value
- count值有以下几种
- count>0: 从列表的头开始,向尾部搜索,移出与value相等的元素,移出count个
- count<0: 从列表尾部向头搜索,移出与value相等的元素,移出count个
- count=0: 移出列表中所有与value相等的值
使用
- LREM myList2 2 b
- LREM myList2 -2 a
- LREM myList2 0 e
9. LINDEX
获取指定索引元素的值
语法:
LINDEX key index
10. LSET
设置指定索引元素的值
语法:
LSET key index value
11. LTRIM:
只保留列表的片段
语法:
LTRIM key start stop使用:
- LTRIM myList1 0 1
- LTRIM myList1 10000 2000 列表被清空
- LTRIM myList1 20000 1000 列表被清空
11. LINSERT
向列表插入元素
语法:
LINSERT key BEFORE|AFTER pivot value使用:
- LPUSH list a b c d e
- LINSERT list BEFORE ‘b’ ‘king’
- LINSERT list BEFORE ‘bb’ ‘king’ 错误
12. RPOPLPUSH
将元素从一个列表转到另一个列表
语法:
RPOPLPUSH source destination使用:
- LPUSH list1 1 2 3
- LPUSH list2 4 5 6
- RPOPLPUSH list1 list2
13. BLPOP
是LPOP的阻塞版本
语法:
使用:
14. RPOPLPUSH
语法:
使用:
4. Set 集合类型
介绍
- 通过hash表实现
- 只能包含2^32-1个元素
- 实现交集,并集,差集
- 通过hash表实现
相关命令
1. SADD
: 向集合中添加元素
语法:
SADD key value [value1,value2……]注意:
1. 不可以添加重复元素
2.使用:
LPUSH testList1 a b c成功返回长度
每次添加的值可以重复
2. SMEMBERS
返回指定集合中的元素
语法:
SMEMBERS key注意:
key不存在返回空
3. SISMEMBER
检查value是否是集合中的元素
语法:
SISMEMBER key value注意:
key不存在返回空
4. SREM
删除集合中指定的元素
语法:
SREM key value []value1 value2….]注意:
key不存在返回0
5. SPOP
删除并返回集合中的随机元素
语法:
SPOP key注意:
key不存在返回空
6. SRANDOMEMBER
随机的返回n个元素
语法:
SRANDMEMBER key count注意:
- count 为正数, 而且小于集合中的元素,返回一个包含随机元素的集合数组,count数大于集合中元素的个数,这时候返回整个集合
- count为负数,返回一个数组,数组中的成员可能出现重复,
数组的长度是count的绝对值
只返回不删除
使用:
- SRANDOMEMBER s1 返回1个
- SRANDOMEMBER s1 2 返回2个
- SRANDOMEMBER s1 50 如果s1的长度大于50,返回所有的元素
- SRANDOMEMBER s1 -2 返回两个
- SRANDOMEMBER s1 -10000 返回10000个会有重复值
7. SDIFF
返回集合间的差集
语法:
SDIFF s1 s2 s3 s4 ……. sn注意:
key不存在返回空
8. SINTER
返回集合间的交集
语法:
SINTER key key key
9. SUNION
返回集合间的并集
语法:
SUNION key key key
10. SCARD
返回集合中元素个数
语法:
SCARD key
11. SDIFFSTORE
返回集合间的差集,并将结果保存到指定集合中
语法:
SDIFFSTORE destination(目标集合【可以是本身】) key key key
12. SINTERSTORE
返回集合间的交集,并将结果保存到指定集合中
语法:
SINTERSTORE destination(目标集合【可以是本身】) key key key
13. SUNIONSTORE
返回集合间的并集,并将结果保存到指定集合中
语法:
SUNIONSTORE destination(目标集合【可以是本身】) key key key
14. SMOVE
将集合中元素移动到另外一个集合中
语法:
SMOVE source(原集合) destination(目标集合【可以是本身】) member注意:
原子操作
5. Zset 有序集合类型 (排序后的集合)
1. ZADD
将元素及分数添加到集合中
语法:
ZADD key score member [ score member ]
2. ZSCORE
将集合中元素的值
语法:
SMOVE source(原集合) destination(目标集合【可以是本身】) member注意:
原子操作
3. SMOVE
将集合中元素移动到另外一个集合中
语法:
SMOVE source(原集合) destination(目标集合【可以是本身】) member注意:
原子操作
4. SMOVE
将集合中元素移动到另外一个集合中
语法:
SMOVE source(原集合) destination(目标集合【可以是本身】) member注意:
原子操作