一、Redis介绍
- -关系型数据库:Mysql、Oracle等;数据保存在磁盘;
- 非关系性(NoSql)数据库:not only sql,redis,mongoDB;数据保存在内存;
- 2009年用C语言开发完成的数据库,最常用的NoSql数据库;
- Remote Dictionary Server:远程字典服务;
二、Redis的数据结构
- Redis以key–value形式保存数据,key一般为String类型;Value包含五种数据类型;
key命名规范
- 不要太长,最好不要超过1024个字节,否则不仅会消耗内存,还会降低查找效率;
- 不要太短,做到见名知意,项目中最好有统一的规范;
1. String类型
keys | values |
key1 | value1 |
key2 | value2 |
.。。。 | 。。。 |
key-n | value-n |
# key和value均为String类型,Value最大可以为512M;
# 赋值 取值 删值
# key不存在时,get获得的数据为nil;key对应的不是字符串数据类型,则报错;
set key; get key; del key;
# 自增,自减, 加一个数,减一个数
# 返回改变后的数;value不是数字就报错;没有该key就初始化一个为0的并自增;
incr key; decr key; incrby/decrby key num;
# 拼接,返回字符串长度,没有就先创建一个为nil
append key str;
2. Hash类型
# 单个及批量赋值
hset key1 field1 value1 field2 value2 field3 value3;
# 单个取值
hget key1 field1; hget key1 field2;
# 批量取值
hmget key1 field1 field2 field3;
# 批量删除:返回删除小key的数量
hdel key1 field1 field2 field3;
# 增加数字:具体类似上述String;
hincrby/hdecrby key1 field1 num;
# 判断是否存在:(1/0)
hexists key1 field1;
# 所有键值对
hgetall key1;
# 键值对个数
hlen key1;
# 所有小key值
hkeys key1;
# 所有values值
hvals key1;
3. List类型(双向散列链表 LinkedList)
- 数据较多时,从左边和右边插入数据,效率很高,中间插的话很慢,value可以重复;;
- 删除时,一个key的所有value都被删除后,对应的key也会被删除;
# 批量增加:左压栈,右压栈
l/rpush key value1 value2 value3;
# 查看:只能左往右,0 开始,-1结束,-2尾二
lrange key start end;
# 弹栈删除:左弹栈,右弹栈 ,返回弹出的元素
lpop/rpop key;
# 修改:只能从左边修改:(0为首元素,-1为尾元素);
lset key index value;
# 插入:从左往右,在第一个pivot元素前/后插入某个值
linsert key before/after pivot value
# 插入:仅当key存在时,才会插入;
lpushx/rpushx key value1 value2 value3;
# 删除:count为正,则从左往右删除count个值为value; count为负,则从右往左删除count个值为value;
# count为0,则删除所有值为value
lrem key count value;
# 循环: 将一个列表中尾部元素弹出并压入到另一个列表中头部
rpoplpush resource destination;
# 链表长度
llen key;
4. Set类型
- 无序,不重复;
- Set中value一般用member来表示;
# 批量插入数据
sadd key member1 member2 member3;
# 批量删除数据
srem key member1 member2 member3;
# 查看数据
smembers keys;
# 查看是否存在(1/0),0代表元素不存在或set不存在
sismember key member1;
# 差集(1减去2的剩余),取交集元素并存入到destset中
sdiff key1 key2;
sdiffstore destset key1 key2
# 交集 ,取交集元素并存入到destset中
sinter key1 key2 key3;
sinterstore destset key1 key2
# 并集,取并集元素并存入到destset中
sunion key1 key2 key3;
sunionstore destset key1 key2
# 长度
scard key;
# 随机返回一个元素
srandmember key;
5. SortedSet类型
- value不可重复,score可以重复,因此有序;score也称为权重;
# 添加:score只能为数字
zadd key1 score1 value1 score2 value2;
# 获取score:只能一个value
zscore key value1;
# SortedSet长度:
zcard key;
# 删除:删除所有元素后,对应的set也会被删除
zrem key value1 value2 value3;
# 排序:按权重从小到大返回value; 0代表第一个,-1代表最后一个
zrange key start end;
# 排序:按权重从小到大返回value及score;
zrange key start end withscores;
# 排序:按权重从大到小返回value;
zrevrange key start end;
# 排序:按权重从大到小返回value及score;
zrevrange key start end withscores;
# 指定value的score增加:返回增加后的值
zincrby key num member
# 范围删除:按照排名范围[]
zremrangebyrank key start end;
# 范围删除:按照分数范围[]
zremrangebyscore key min max;
#范围查询:一定分数区间的value总数
zcount key min max
通用操作
# 查看: * 一个或多个字符; ? 一个任意字符;
keys pattern;
# 删除:
del key1 key2;
# 查看是否存在: (1/0)
exists key1;
# 改名:
rename key1 newkey1;
# 类型:
type key;
# 设置过期,过期后会删除
expire key second;
# 剩余时间: -1 :没设置,-2 :已过期或key不存在
ttl key;