一、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类型

redis的数据存在哪 redis数据放在哪里_d3

# 单个及批量赋值
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)

redis的数据存在哪 redis数据放在哪里_hg_02

  • 数据较多时,从左边和右边插入数据,效率很高,中间插的话很慢,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;