*redis基础知识点

ping 检查redis服务器的连接是否正常如果正常返回----pong

info 查看redis服务器的统计信息

redis-benchmark 测试redis服务的性能

redis的数据库实例

  1. 启动时默认数据库实例为16个;
  2. 数据实例编号0-15,使用时通过编号来使用数据库;
  3. redis没有表结构占用存储空很少;
  4. 切换数据库实例 “select index”;
  5. 查看当前数据库实例种key 的数量“dbsize”
  6. 查看当前数据库实例种所有 的key “keys *”
  7. 清空当前数据库实例 “flushdb”
  8. 清空当前所有数据库实例 “flushall”
  9. 查看redis中的配置信息 “config get *” 修改redis.config 来配置redis

redis五种数库结构
string字符串: 单key -单value
list列表: 单key-多value
set集和: 单key-多无序value
zlset: 单key-多有序value
hash: 单key-对象(属性:值)

  1. 字符串类型string
    字符串类型是Redis中最常用的数据类型,它能存储任何数据类型的数据,包括二进制数据,序列化后的数据,JSON化后的对象甚至是一张图片.最大512M

  2. 列表类型
    Redis列表是简单的字符串列表,按照插入顺序,元素可以重复.可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构

3.集合类型
Redis的set是string类型的无序无重复集合

  1. 哈希类型 hash
    hash是一个string类型的field和value的映射表,hash特别适合用于存储对象类型

5.有序集合
Redis有序集合zset和set一样也是string类型的集合,且不允许重复的成员.不同的是zset每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员从小到大排序

redis key常用的 操作命令
exist 查看key是否存在
move 移动指定key到数据库实例中
ttl 查看key的剩余生存时间 (integer) -1 没有设置生存时间 ;(integer) -2 key不存在
expire 设置key的最大生存时间
type 查看key的数据类型
rename 重命名key
del 删除指定的key,返回值是实际删掉的key的数量

redis字符串数据操作命令
set 将string数据设置到redis中 (set k1 v1)
get 从redis数据库获取string数据 (get k1)
append 追加string (append k1 v2)返回字符串个数
strlen 获取string长度 (strlen k1)
incr 将数值string进行加1运算 (incr k1) 返回加1之后的数据
decr 将数值string进行减1运算 (decr k1) 返回加1之后的数据
incrby 将数值string进行加offset运算 (incrby k1 10) 返回加10之后的数据
decrby 将数值string进行减offset运算 (decrby k1 10) 返回减10之后的数据
getrange 将string截取不影响redis里面内容 (getrang k1 startindex endindex)+下标从左到右 -下标从右向左
setrange 覆盖string中 startindex endindex内容 (setrange k1 startindex endindex)
setex 设置string同时设置生命周期 (setex k1 seconds v3)
setnx 设置string到redis中当key存在放弃设置key中的value (setnx k1 v1)
mset 批量将string设置redis中 (mset) k1 v1 k2 v2 …)
mget 批量将获取redis中的数据 (mget) k1 v1 k2 v2 …)
msetnx 批量设置string到redis中当key存在放弃设置key中的value (msetnx k1 v1 k2 v2)

redis list数据操作命令
list 一个key对应多个有序value多个value之间有顺序,最左侧是表头最右侧是表尾;
每一个元素都有下标表头的下标是0,依次往后排序,最后一个元素是下标的长度-1;
每一个下标可以用负数来表示,负下标从表尾来计算,最后一个下标用-1表示;
元素在列表中的顺序由下标放入顺序来决定;
lpush 一个或者多个值插入列表的表头(左侧)(lpush k1 value value…)
rpush 一个或者多个值插入列表的表尾(右侧)(rpush k1 value value…)
lrange 获取列表中的指定元素 (lrange l1 startindex endindex)
lpop 指定列表中移除并返回表头元素 (lpop k1 )
rpop 指定列表中移除并返回表尾元素 (rpop k1 )
lindex 获取列表中指定下标元素 (lindex k1 index)
llen 获取列表长度 (llen k1)
lrem 移除指定列表中跟v1相等的数据 (lrem k1 count v1)count >0 删除列表中左侧count个跟v1相等的元素;count <0 删除列表中右侧count个跟v1相等的元素;count =0 删除列表中全部跟v1相等的元素

redis 集和(set)数据操作命令
集和一个key对应多个无序value不能重复不用考虑下标;
sadd 将多个元素添加到集和中 (sadd k1 v1 v2)value不能重复
smembers 获取指定集和全部元素 (smermbers k1)
sismember 判断指定元素在集和中是否存在 (sismemeber k1 v1)存在v1返回1否则0
scard 获取指定集和长度 (scard k1)
srem 移除指定集和中的一个或者多个元素 (srem k1 v1 v2)返回移除的元素个数
srandmember 随机获取指定集和一个元素 (srand k1 count) count >0 随机获取多个元素不会重复; count >0 随机获取多个元素可能重复
spop从指定集和中随机移除一个或者多个元素 (spop k1 count) count >0 随机删除多个元素不会重复; count >0 随机删除多个元素可能重复
smov 指定集和中的元素移到另一个集和 (smov k1 k2 v1)
sdiff 返回一个集和中有其他集和中没有的元素 (sdiff k1 k2 k3)
sinter 获取一个集和中有其他集和也有的元素 (sinter k1 k2 k3)
sunin 获取指定集和中所有的元素 (sunion k1 k2 k3)

redis 哈希(hash)数据操作命令
多个key 对应一个value
hset 将一个或者多个file val的键值对设置到hash表中 (hset k1 f1 v1…)
hget 获取指定哈希表中指定的filed值 (hget k1 f1)
hmset 将多个批量file val的键值对设置到hash表中 (hmset k1 f1 v1…)
gmget 获取批量指定哈希表中的filed的值 (hget k1 f1 f2…)
hgetall 获取批量指定哈希表中的filed和value (hgetall k1)
hdel 从指定哈希表中删除一个或者多个flied 和value (hdel k1 f1 f2…)
hlen 获取哈希表中所有filed的个数 (hlen k1)
hexists 判断哈希表中是否存在某一个filed (hexists k1 f1)
hkeys 获取指定hash表中所有的value的列表 (hkeys key)
hvals 获取指定hash表中所有的value的列表 (hvals key)
hincrby 对指定哈希表中指定field值进行整数加法运算(hincrby k1 f1 int)
hincrbyfloat 对指定哈希表中指定field值进行浮点数加法运算(hincrbyfloat k1 f1 float)

redis 有序集合(zset)数据操作命令
有序集合本质是集和元素不能重复;
每个元素都关联一个分数,分数可以重复,redis会根据分数对应的元素进行自动排序;
有序集合中每一个元素都有顺序,那么也就有下标;
有序集合中元素的排序规则又和列表中的排序规则不一样;
zadd 将一个或者多个元素的member及其score值加入有序集和 (zadd k1 score1 member1 score2 member2 …)
zrange 获取有序集和指定下标区间的元素 (zrange k1 startindex endindex [withscores])withscores获取value的分数
zrangebyscore 获取有序集合中根据分数区间元素 (zrangebyscore min max [withscores] )
zrem 删除有序集和中一个或者多个元素 (zrem k1 member member…)
zcard 获取指定有序集和的个数(zcard k1)
zcount 获取有序集合中分数在指定区间的元素个数 (zcount k1 min max)
zrank 获取有序集和中指定元素的排序 排序从小到大排(zrank k1 member)
zscore 获取有序集和中指定元素的分数 (zscore k1 member)、
zrevrank 获取有序集和中指定元素排序 排序从大到小排 (zrevrank k1 member)

redis配置文件
port:指定redis服务所使用的端口,默认使用 6379
bind:配置客户端连接redis服务时,所能使用的ip地址,默认可以使用redis服务所在主机上任何一个ip都可以,一般情况下,都会配置一个ip,而且通常时真实ip
如果redis服务配置了port和bind,客户端连接redis服务时必须按照指定的端口和ip
redis-cli -h 192.168.1.1 -p 6380
关闭redis服务
redis-cli -h 192.168.1.1 -p 6380 shutdown
loglevel:配置日志级别,在开发阶段设置为debug,生产阶段通常配置为notice或者warning
logfile:指定日志文件名,如果不指定,redis只是进行标准输出。要保证日志所在的目录必须存在,文件可以不存在。还要再redis启动时指定所使用的配置文件,否则配置不起作用。
databases:配置redis数据库实例的个数,默认是16个。
requirepass:配置redis的访问密码。默认不配置密码,即访问不需要密码验证。此时配置需要再protected-mode=yes时起作用。使用密码登录客户端:redis-cli -h ip -p 6379 -a pwd
redis提供持久化策略
redis时内存数据库,把数据存储再内存中,这样加快读取数据速度当服务器宕机数据会丢失。在适当的时机手段把内存中的数据持久化到磁盘中每次redis启动时都可以把磁盘上的数据持久化到内存中。
RDB策略:在指定的时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化。
save :配置持久化策略
dbfilename: 配置redis RDB持久数据存储的文件
dir :配置redis RDB持久数据存储的文件所在的目录
AOF策略:采用操作日志来记录每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志的指令。效率低下redis默认不会开启AOF功能。
appendonly:配置是否开启AOF策略
appendfilename:配置操作日志文件

redis事务
事务:把一组数据命令放在一起执行,保证操作的原子性,要么同时成功,要么同时失败。
redis事务:允许把一组redis命令放在一起,把命令进行序列化,然后再一起执行,保证部分原子性。
mutil:用来标记一个事务的开始。
exec:用来执行事务队列中所有的命令。
redis事务只能保证部分原子性,再压入事务队列过程中发生错误命令,则事务中所有的命令都不执行,保证事务的原子性。
如果一组命令再压入队列过程中正常,但是再执行事务队列过程中发生了错误,则只会影响发生错误的命令,不会影响其他命令的执行,不能保证事务的原子性。
discard:清除压入事务的队列命令。
watch:监控某一个键,当事务再执行的过程中,此键值发生了变化,则本事务放弃执行否则,正常执行。
unwatch:放弃监控所有键值。
redis消息发布与订阅
redis客户端订阅频道,消息的发布者往往再频道上发布消息,所以订阅频道的客户端能够接受到消息。
subscribe:订阅一个或者多个频道消息。
subscribe ch1 ch2 ch3
publish:将消息发布到指定的频道、
publish ch1 hello
psubcribe: 订阅一个或者多个频道消息,频道名支持通配符。
subscribe news.*

redis的主从复制
redis的主从复制:主多从少,主写从度,读写分离、主写同步复制到从。
搭建一主二从的redis集群:
1)搭建三台redis服务,使用一个redis模拟三台redis服务
提供三份redis配置文件:redis6379.conf、redis6380.conf、redis6781.conf
bind 127.0.0.1
port 6379
pidfile /var/run/redis_6379.pid
logfile “6379.log”
dbfilename dump6379.rdb
分别使用三个redis配置文件,启动三个redis服务:
redis-server redis6379.conf &
redis-server redis6380.conf &
redis-server redis6381.conf &
2)通过redis客户端分别连接三台redis服务:
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
3)查看redis服务集群中的主从角色:
info replication
默认的情况下,所有的redis服务都是主机,即都可以写和读,但是还没有从机。
4)现在6379进行写操作:
set k1 v1
三台redis服务相互独立,互补影响
5)设置主从关系:设从不设主
在6380上执行:slaveof 127.0.0.1 6379
在6381上执行:slaveof 127.0.0.1 6379
6)全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库。
在6380和6381上执行keys *
7)增量复制;主库数据会自动同步到从库。
在6379上执行:set k2 v2
在6380和6381上执行keys *
8)主写从读,读写分离:
在6380和6381上执行 :set k3 v3 ===>报错
9)主机宕机从机原地待命:
关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
查看6380和6381服务的主从角色:info replication
10) 主机恢复、一切恢复正常:
redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
11)从机宕机、主机少了一个从机其他从机不变:
关闭6380服务:redis-cli -h 127.0.0.1 -p 6380 shutdown
查看6379服务的主从角色:info replication
查看6381服务的主从角色:info replication
12)从机恢需要重新设置主从关系:
重启6380服务: redis-server redis6380.conf &
客户端连接6380:redis-cli -h 127.0.0.1 -p 6380
在6380上 执行:slaveof 127.0.0.1 6379
13)主机宕机,从机上位:
6379坏了,从机断开原来的主从关系在6380上执行:slaveof no one
查看6380的服务的主从角色:info replication
在6381上从新设置主从关系:slaveof 127.0.0.1 6380
6379修好了,恢复变成了孤家寡人:
重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
天堂变地狱:
在6379上执行:slaveof 127.0.0.1 6381
在6379上执行:info replication 既是主又是从机
小结:一台主机可以配置多台从机,一台从机可以配置多台从机,从而形成一个庞大的集群架构减轻了一台主机的压力,但是增加了服务器的延迟时间。
redis哨兵模式
主机宕机,从机上位自动版:
搭建一主二从的redis集群:
1)搭建三台redis服务,使用一个redis模拟三台redis服务
提供三份redis配置文件:redis6379.conf、redis6380.conf、redis6781.conf
bind 127.0.0.1
port 6379
pidfile /var/run/redis_6379.pid
logfile “6379.log”
dbfilename dump6379.rdb
分别使用三个redis配置文件,启动三个redis服务:
redis-server redis6379.conf &
redis-server redis6380.conf &
redis-server redis6381.conf &
2)通过redis客户端分别连接三台redis服务:
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
3)查看redis服务集群中的主从角色:
info replication
默认的情况下,所有的redis服务都是主机,即都可以写和读,但是还没有从机。
4)现在6379进行写操作:
set k1 v1
三台redis服务相互独立,互补影响
5)设置主从关系:设从不设主
在6380上执行:slaveof 127.0.0.1 6379
在6381上执行:slaveof 127.0.0.1 6379
6)提供哨兵的配置文件在redis安装目录下创建配置文件:redis_sentinel.conf
添加 sentinel monitor dc-redis 127.0.0.1 6379 1
7)启动哨兵服务:
redis-sentinel redis_sentinel.conf
8)主机宕机:
关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
哨兵程序自动选择从机上位。
9)之前主机恢复:自动从属于新的主机。
重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379

redis基础知识点相关推荐

  1. Redis 基础知识点总结

    1. NoSQL 数据库简介 NoSQL 是为了解决性能问题产生的一种技术,Redis 就是一个典型的NoSQL 的数据库. 1.1 技术发展 技术分类: 解决功能特性的问题:Java.Jsp.Tom ...

  2. 【Redis】Redis基础知识点

    Redis基础知识点 简介.Memcache和Redis.多路I/O复用 常用数据类型 海量数据中筛选某一固定前缀的key 实现简单的分布式锁 实现异步队列 持久化:RDB.AOF.混合 Pipeli ...

  3. Redis基础知识点总结

    Redis默认端口6379 一.安装 1.去redis.cn看看最新的稳定版下载地址,http://download.redis.io/releases/redis-6.0.6.tar.gz 2.下载 ...

  4. 计算机网络基础知识点快速复习手册

    前言 本文快速回顾了计算机网络书本中常考的的知识点,用作面试复习,事半功倍. 主要内容有:计算机网络体系结构,TCP与UDP,UDP/TCP实现DEMO代码 面试知识点复习手册 全复习手册文章导航 全 ...

  5. Redis 核心知识点总结

    Redis核心知识点总结 一.数据类型 String string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB SET runoob "test&qu ...

  6. Java常用基础知识点总结(最全)

    Java基础知识点总结 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(Sql. ...

  7. Redis基础篇(万丈高楼平地起):核心底层数据结构

    微信原文链接,排版更舒适. 大家好,我是小龙.近期有很多小伙伴私信我Redis怎么做持久化?集群方案怎么做?分布式锁怎么实现?可是我发现,每次简答完一个问题他还有其他类似问题,或则各个知识点不能串通形 ...

  8. Redis基础常用命令入门

    目录 Redis基础命令 一.字符串类型 ▪️ 赋值 SET : ▪️ 获取 GET: ▪️ 递增(减) 1 INC.DECR: ▪️ 递增(减)指定整数 INCRBY .DECRBY: ▪️ 递增( ...

  9. C++面试基础知识点

    C++开发面试基础知识点 1. 语言基础 1.1 const的用法 1)在定义的时候必须进行初始化 2)指针可以是const  指针,也可以是指向const对象的指针 3)定义为const的形参,即在 ...

最新文章

  1. 同一个字符串hash值相同吗_图说:为什么Java中的字符串被定义为不可变的
  2. tcp connection setup的实现
  3. SlidingDrawer的使用(一)
  4. linux磁盘响应慢,arch开机速度竟然是挂载磁盘拖慢了。。
  5. tensorflow2.0 Dataset创建和使用
  6. linux ps进程管理命令,Linux 进程管理命令之ps
  7. 【赛事】京东百万巨奖寻多传感器融合定位算法英雄
  8. 高阶java_Java高阶语法---final
  9. POJ3421:X-factor Chains——题解
  10. Palm应用开发之三appinfo.json 文件详解
  11. 测试学习-测试工具wireshark、HFS、wlan信号
  12. 软考高级/高项/信息系统项目管理师看江山好还是马军好?
  13. 多城市二手车买卖发布管理小程序开发
  14. uva10306 - e-Coins(完全背包)
  15. uniapp链接生成二维码
  16. mysql按笔划排序_mysql中怎么按姓氏笔画排序
  17. 为企业数据安全保驾护航
  18. 【编译原理】-- 第二章(二)(短语、简单短语、句柄、文法二义性、语法树、例题)
  19. 徐工汉云解析中小企业如何设备上云?
  20. aslkjdkkjas

热门文章

  1. 「万字长文」谈认知差异——理解层次中的“金字塔”
  2. 计算机环境下的审计技术方法有哪些,审计技术方法的类型包括哪些
  3. java-net-php-python-jspm百色学院毕业生离校登记管理系统计算机毕业设计程序
  4. 最经典的flash鼠标绘画技术详解(六)
  5. 抽象方法(abstract);
  6. c语言从键盘输入一个不超过8位的正的十六进制数字符串,蓝桥基础练习 十六进制转十进制...
  7. 信号量 ——什么是信号量
  8. java正则表达式匹配空字符串,用于指定空字符串的正则表达式
  9. 胆碱缺乏症MCD饮食诱导脂肪肝模型 被广泛应用于肝代谢病的研究中
  10. 音频转换m4a软件哪个好?三招教你转换格式