Redis知识点与基本操作

  • Post author:
  • Post category:其他

一、基础知识

  1. 定义:redis是开源的、高性能的key-value存储系统,常被称为数据结构服务器。
  2. 数据类型:字符串(Strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)。
  3. 优点:
    a. 性能极高:支持超过100k+每秒的读写频率
    b. 丰富的数据类型
    c. 原子操作
    d.支持publish/subscribe、数据持久化、主从复制、快速的非阻塞首次同步、网络断开自动重连、通知、key过期、发布、管道、虚拟内存等特性
    e.内存中数据集
    f.丰富的客户端

二、基本操作

1. 终端操作

  1. 命令行终端查看redis
ps -ef | grep redis

在这里插入图片描述

  1. 通过端口号查看redis服务器状态
netstat -nlt | grep 6379

在这里插入图片描述

  1. 启动redis
redis-cli  
redis-cli --raw     #避免redis环境出现中文乱码情况

在这里插入图片描述

2. key相关操作

  1. exists检测key是否存在
  2. del删除指定key
  3. type查看key类型
  4. keys pattern匹配符合pattern的key
  5. randomkey返回随机key若数据库空则返回空
  6. rename重命名key,新名存在被覆盖
  7. renamenx在新名字存在时返回失败
  8. dbsize返回数据库键值数量
  9. expire指定key过期时间,单位秒
  10. ttl返回设置过期时间key的剩余过期秒数
  11. select通过索引选择数据库
  12. move将key移动到指定数据库
  13. flushdb删除当前数据库中所有key
  14. flushall删除所有数据库中key
    (注意:多数操作成功返回1,失败返回0)
exists key
del key
type key
keys *        #可以是正则表达式

在这里插入图片描述
在这里插入图片描述

3. strings操作

(补充:string可包含jpg、序列化对象、上限1G)

  1. set创建key的value
  2. setnx若key不存在则赋值
  3. get获取key对应的值
  4. getset设置key值并返回之前的value
  5. mget返回多个key对应的value
  6. mset一次设置多个key的value
  7. msetnx同上但不会覆盖已有值
  8. incr对key的value做 ++操作返回新值
  9. decr对key的value做 –操作返回新值
  10. incrby对key的value做 +指定值操作返回新值
  11. decrby对key的value做 -指定值操作返回新值
  12. append对给定key的value追加字符串并返回字符串长度
  13. getrange返回指定key的value的指定长度
    (注意:若相应操作key不存在,一般返回nil)
    在这里插入图片描述
    在这里插入图片描述

4. lists操作

(补充:list实质是每个元素都是string的双向链表)

  1. push给列表插入值,range查看列表(l左、r右)
  2. lpush左插入
  3. rpush右插入
  4. lrange返回key的指定区间元素
  5. llen返回key对应的list长度
  6. ltrim截取list保留指定区间元素
  7. lset设置list中指定下标元素值
  8. lrem从list中删除count个和value相同的元素,count=0全部删除
  9. lpop从头部删除list元素
  10. rpop从尾部删除list元素
  11. blpop给定list删除元素,若所有给定list都为空则阻塞
  12. brpop同上
  13. rpoplpush从list尾部和删除元素并添加到指定list的头部
    在这里插入图片描述

5. set操作

(补充:set是string的无序集合,最大包含2的32次方减1个元素)

  1. sadd添加一个string元素到set集合中
  2. srem从key对应的set中移除给定元素
  3. spop删除并返回key对应set中随机一个元素
  4. srandmember随机取set中一个元素但不删除
  5. smove从一个set中移除指定元素并添加到另一个set中
  6. scard返回set中元素个数
  7. sismemter判断元素是否在set中
  8. sinter饭hi给定key的交集
  9. sinterstore同inter但是会将交集存放到指定集合中
  10. sunion返回所有给定key的并集
  11. sunionstore同sunion并保存到指定集合中
  12. sdiff返回所有给定key的差集
  13. sdiffstore同sdiff并保存差集到指定集合
  14. smembers返回key对应的set中的所有元素,结果无序
    在这里插入图片描述
    在这里插入图片描述

6. sorted set操作

(补充:sorted set和set一样,不同是每个元素关联一个double类型的score,是skip list和hash table的混合体,利用score排序就可以有序获取集合中元素)

  1. zadd添加元素到集合
  2. zrem删除指定元素
  3. zincrby增加对应的值,并保持该集合有序
  4. zrank返回i指定元素在集合中的排名
  5. zrevrank同上,但集合中元素按score从大到小排序
  6. zrange取集合指定区间元素
  7. zrevrange同上,返回集合中score逆序
  8. zrangebyscore返回集合中score在给定区间的元素
  9. zcount返回集合中score在给定区间的数量
  10. zcard返回集合中元素个数
  11. zscore返回给定元素对应的score
  12. zremrangebyrank删除集合中排名在给定区间的元素
  13. zremrangebyscore删除集合中score在给定区间的元素
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

7. hash操作

(补充:hash是string类型的field和value的映射表,hash适合存储对象,占用更少内存方便存取整个对象)

  1. hset设置hash field为指定值
  2. hget获取指定的hash field
  3. hmget获取全部指定的hash field
  4. hmset同时设置hash的多个field
  5. hincrby将指定的hash field加上给定值
  6. hexists测试指定field是否存在
  7. hdel删除指定的hash field
  8. hlen返回指定的hash的field数量
  9. hkeys返回hash的所有field
  10. hvals返回hash的所有value
  11. hgetall返回hash的所有field和value
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

8. 持久化操作

(补充:redis是一个支持持久化的内存数据库,redis需要经常将内存中的数据同步到磁盘保证持久化)

  1. snapshotting(快照)
    将内存中数据以快照方式写入二进制文件中,默认文件名为dump.rdb可以配置自动做快照持久化方式
save 900 1 #900秒内超过1个key被修改发起快照
save 300 10
  1. append-only file(aof)
    比快照有更好的持久化性,redis将收到的写命令通过write追加到文件中默认appendonly.aof,当redis重启通过执行文件中保存的写命令来重建整个数据库内容,故非实时写入磁盘可能有部分丢失,可通过配置文件告诉redis通过fsync函数强制os写入磁盘的时机,三种方式:
appendonly yes   #启用aof持久化方式
appendfsync always   #每次收到写命令强制写入磁盘,最慢,保证完全的持久化
appendfsync everysec    #每秒强制写入磁盘一次,折中
appendfsync no     #完全依赖os,性能最好,持久化没保证

9. 主从复制

特点:
a. master可以有多个slave
b. 除多个slave连接到相同的master外,也可连接其他slave形成图状结构
c. 主从复制不阻塞master,当一个或多个slave与master进行初次同步数据master可继续出来client请求,反之不可以
d. 提高了系统的可伸缩性,可用做简单的数据冗余
f. 可以在master禁用数据持久化,在slave配置数据持久化

10. 发布订阅

pub/sub是消息通信模式,消息类型称为通道channel,消息传递是多对多的。

11. 管道

redis是cs模式的TCP server,一个client可以通过一个socket连接发起多个请求命令,请求发出后client通常被阻塞等待redis服务处理,并返回报文。pipeline方式将多个命令打包一起发送,无需等待单条命令的响应返回。

12. 虚拟内存

redis没有使用os提供的虚拟内存机制,而是自己实现了虚拟内存机制,将不常用数据交换到磁盘上,提高单台redis server的数据库容量,对性能造成影响不大。

13. redis应用场景

  1. 取最新N个数据的操作
  2. 排行榜应用,取top N操作(sorted set的score)
  3. 需要精准设定过期时间的应用(sorted set的score)
  4. 计数器应用(incr,decr)
  5. uniqe操作,获取某段时间所有数据去重(set)
  6. 实时系统,反垃圾系统(set)
  7. pub/sub构建实时消息系统
  8. 构建队列系统(list、sorted set)
  9. 缓存

版权声明:本文为weixin_48062951原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。