• Part_one:Redis第一次接触


    1.redis学习

    • 数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失。

    • selenium操作浏览器时,要注意浏览器资源释放,方式内存泄露,崩溃

    • mysql是文件型数据库,默认持久化到硬盘上

    • redis 是内存型数据库

      	数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失selenium操作浏览器时,要注意浏览器资源释放,方式内存泄漏,崩溃。
      	with opne() 默认close关闭文件句柄
      	word工具,额米有保存前,数据放在内存里,保存后持久化到磁盘上,永久存储在mysql是文件型数据库,默认持久化到磁盘上
      

    2.redis安装学习

    • yum安装,最简单,配置yum源,yum仓库才可以
    • 源码编译安装,指定安装路径,自定制第三方扩展模块功能
    • rpm软件包手动安装,很烂,手动解决依赖关系,不适用
    • 小拓展:ctrl +alt + f1~f7 f1是图形化(物理服务器的Linux界面)

    1.redis安装步骤:

    1.解决编译安装所需的依赖环境
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
    2.在目标目录下 ,下载源代码包
    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    
        解压:tar -zxvf -redis-4.0.10.tar.gz
        
    3.执行./configure --prefix=/opt/redis/   #释放makefile,告诉gcc编译器,redis的安装路径
    	如果默认没有configure脚本,出现了makefile,直接make&&make install 安装即可
    	
    4.编译且安装
    make && make install
    
    • 小拓展
    #如果你发现云服务器被矿机攻击,有一个进程占用100%CPU资源!
    解决:
    	kill -9  杀死进程
    检查定时任务
        crontab -l    检查定时任务
        crontab -e    编辑定时任务文件,可以删除,定时任务。
        
    全局搜索病毒文件,删除它(注意恶意病毒,篡改了文件名,了解即可)
    	find / -name 病毒文件
    	找到了 rm -rf 删除
    如果 删除不掉,很有可能文件被加锁了
    	lsattr filename.txt
        chattr -a filename  #给文件去锁
    
    

    2.编译完成后,即可使用redis

    启动redis服务:
    	redis-server
    直接这样执行:
    	会出现不安全情况,容易被攻击
    

    3.指定配置文件,Centos安全的启动redis服务端

    (1)redis没有用户概念,redis只有密码
    (2)redis默认在工作在保护模式下。不允许远程任何用户登录的(protected-mode)
    
    • 更改启动端口

      port 6380  #更改默认启动端口
      
    • 添加redis密码

      requirepass xxxxxx   #设置redis启动密码,xxxx是自定义的密码
      
    • 开启redis安全模式

      protected-mode yes   #打开保护模式
      
    - 示例演示 important!!!
    1.第一步
    [root@xujunk safe_conf]#vim /safe_conf/redis.conf
    #在redis.conf配置信息如下
        bind 127.0.0.1
        protected-mode yes
        port 6379
        requirepass  haohaio
        daemonize yes
        pidfile /var/run/redis_6379.pid
        loglevel notice
        logfile ""
    
    2.用自己配置好redis.conf 开启redis
    [root@xujunk safe_conf]#redis-server /opt/my_redis/redis-4.0.10/safe_conf/redis.conf
    
    3.查看redis启动状态:
    [root@xujunk safe_conf]#ps -ef |grep redis
    
    4.redis-cli启动,haohaiyou是密码
    [root@xujunk safe_conf]#redis-cli -p 6400 -h 127.0.0.1 -a haohaiyou
    
    
    

    4.过滤出配置文件有益的信息(取出空白行和注释行)

    • redis.conf
    #找出注释行的数据
    grep "^#" redis.conf
    #找出空行
    grep  "^$"
    #找出除空白行  和 注释行 以外的行
    [root@xujunk redis-4.0.10]#grep -v "^#" redis.conf | grep -v "^$"
    	#-v 作用取相反
    

    5.指定配置文件启动:

    
    bind 192.168.182.130 
     #绑定ip,如需要远程访问,需要填写服务器ip
    protected-mode yes	#安全模式 
    port 6800		#端口 
    requirepass  haohaio         #密码                                                                       
    daemonize yes
    #守护进程方式运行,后台运行
    pidfile /var/run/redis_6379.pid
    #进程id文件
    loglevel notice	
    #日志等级
    logfile ""
    #日志文件
    slaveof
    #主从复制
    
    
    • 启动redis服务端:
    [root@xujunk redis-4.0.10]#redis-server redis.conf
    
    • 启动redis客户端
    [root@xujunk redis-4.0.10]#redis-cli -p 6379 -h 127.0.0.1
    
    • 查看redis 进程状态
    ps -ef|grep redis
    
    netstat -tunlp|grep redis
    #LISTEN  表示监听状态
    
    • 验证连接成功
    客户端输入:
    	127.0.0.1:6379> ping
    	返回值:PONG
    
    

    3.redis 数据结构

    • redis是一种高级的key:value存储系统,其中balue支持五种数据类型。

      • 字符串
      • 散列
      • 列表
      • 集合
      • 有序集合
    • 基本命令:

      127.0.0.1:6379> keys *   #查看所有的key
      127.0.0.1:6379> type key  #查看key的类型
      127.0.0.1:6379> expire key seconds #过期时间
          示例:
          	>expire name "Tom" 10
              #表示10秒后 {"name":"Tom"}键值对将消失
      127.0.0.1:6379> ttl key   #查看key过期剩余时间  -2表示key已经不存在了
      127.0.0.1:6379>persist key   #取消key的过期时间  -1表示key存在,没有过期时间
      127.0.0.1:6379>exists key   #判断key存在  存在返回1  否则0
          
      127.0.0.1:6379>exists key   #判断key存在不?  存在返回1  否则0
      127.0.0.1:6379>del key		#删除key  返回1代表删除成功,返回0代表删除失败
      127.0.0.1:6379>dbsize       #计算当前库key的数量, 没有参数
      
      

    1.字符串:

    • strings类型
    1.set			设置key
    	127.0.0.1:6379> set k1 "v1"
    	>>>OK
    2.get			获取key
    	127.0.0.1:6379> get k1
    	>>>"v1"
    3.append    追加string
    	127.0.0.1:6379>append name ' dsb'  
         >>> 6   #返回追加后字符串长度
    4.mset      追加key的string
    	127.0.0.1:6379> mset u1 "xm" u2 "xg" u3 "xh"
    	OK
    5.mget	    获取多个value
    	127.0.0.1:6379> mget u1 u2
        1) "xm"
        2) "xg"
    6.del	   删除key
    	127.0.0.1:6379> del k1
    	(integer) 1
    7. incr    递增 +1
    	127.0.0.1:6379> incr num
    	(integer) 10
    8.decr     递减-1
    	127.0.0.1:6379> decr num
    	(integer) 9
    
    

    2.list类型:

    • list类型为双向队列
    1.lpush			从列表左边插入
    	127.0.0.1:6379>lpush hobby "sleep" "swim" "read"
    
    2.lrange		获取一定长度的元素
    	127.0.0.1:6379> lrange hobby 0 3
        1) "read"
        2) "swim"
        3) "sleep"
    3.rpush			从列表右边插
    	127.0.0.1:6379> lrange hobby 0 4
        1) "read"
        2) "swim"
        3) "sleep"
        4) "pingpang"
    4.ltrim          截取一定长度列表,从索引0取到2,删除其余的元素
    	127.0.0.1:6379> ltrim hobby 0 2
    	OK
    5.llen			查看长度
    	127.0.0.1:6379> llen hobby
    	(integer) 3
    6.lpop			删除最左边一个元素
    	127.0.0.1:6379> lpop hobby
    	"read"
    
    7.rpop			 删除最右边一个元素
    	127.0.0.1:6379> rpop hobby
    	"sleep"
    8.lpushx/rpushx  	key存在添加值,不存在不处理
    	127.0.0.1:6379> lpushx hobby "read"
    	(integer) 2
    

    3.sets集合类型:

    • redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
    • 集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
    1.sadd		添加 元素
    127.0.0.1:6379> sadd zoo "tigger"
    (integer) 1
    
    2.srem      删除元素
    127.0.0.1:6379> srem zoo "tigger"
    (integer) 1
    
    3.sismember        判断是否为set的一个元素
    127.0.0.1:6379> sismember zoo "tigger"
    (integer) 1
    
    4.smembers		   返回集合所有的成员
    127.0.0.1:6379> smembers zoo
    1) "monkey"
    2) "pandas"
    3) "tigger"
    
    5.sdiff			    返回一个集合和其他集合的差异
    127.0.0.1:6379> sdiff zoo zoo2
    1) "tigger"
    2) "pandas"
    #找出集合zoo中有的,而zoo2中没有的元素
    
    6.sunion			返回几个集合的并集
    127.0.0.1:6379> sunion zoo zoo2
    1) "tigger"
    2) "monkey"
    3) "pandas"
    4) "bird"
    5) "fox"
    
    

    4.有序集合(以Z开头的命令)

    • 用来保存需要排序的数据,例如排行榜,成绩,工资等。

    • 实例:

    #利用有序集合排序,排序学生的成绩
    127.0.0.1:6379> zadd score 70 "wang"
    (integer) 1
    127.0.0.1:6379> zadd score 60 "li"
    (integer) 1
    127.0.0.1:6379> zadd score 60 "liu"
    (integer) 1
    
    #zreverange倒叙   zrange正序
    127.0.0.1:6379> zrevrange score 0 -1 withscores
    1) "wang"
    2) "70"
    3) "liu"
    4) "60"
    5) "li"
    6) "60"
    127.0.0.1:6379> zrange score 0 -1 withscores
    1) "li"
    2) "60"
    3) "liu"
    4) "60"
    5) "wang"
    6) "70"
       
    zrem		移除
    127.0.0.1:6379> zrem score wang
    (integer) 1
    
    zcard		返回有序集合基数
    127.0.0.1:6379> zcard score
    (integer) 2
    #2个基数
    
    zscore        返回成员的score值
    
    127.0.0.1:6379> zscore score li
    "60"
    #查询score键,li对象的值
    
    zrank	返回有序集合中,成员的排名,默认按score,从小到大排序
    127.0.0.1:6379> zrank score wang
    (integer) 3
    #第三名   从0索引开始
    

    5.哈希数据结构

    • 哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1,取出k2
    • hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。
    • hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
    1.hset 	设置散列值
    127.0.0.1:6379> hset news1 title "New1 title"
    (integer) 1
    127.0.0.1:6379> hset news1 content "This is first news"
    (integer) 1
    2.hget	获取散列值
    127.0.0.1:6379> hget news1 content
    "This is first news"
    127.0.0.1:6379> hget news1 title
    "New1 title"
    
    3.hmset 	设置多对散列表
    127.0.0.1:6379> hmset news2 title "New2 title" content "This is seconde news"
    OK
    
    4.hmget 	获取多对散列值
    127.0.0.1:6379> hmget news2 title content
    1) "New2 title"
    2) "This is seconde news"
    
    5.hsetnx	如果散列已经存在,则不设置(防止覆盖key)
    # 1代表设置成功,0代表设置失败
    127.0.0.1:6379> hsetnx news2 title "news 2"
    (integer) 0
    127.0.0.1:6379> hsetnx news3 title "news 3"
    (integer) 1
    
    6.hkeys     返回所有keys
    127.0.0.1:6379> hkeys news1
    1) "content"
    2) "title"
    
    7.hvals     返回所有values
    127.0.0.1:6379> hvals news1
    1) "This is first news"
    2) "New1 title"
    
    8.hlen      	返回散列包含域(field)的数量
    127.0.0.1:6379> hlen news1
    (integer) 2
    127.0.0.1:6379> hlen news2
    (integer) 2
    
    9.hdel     删除散列指定的域(field)
    127.0.0.1:6379> hdel news1 title
    (integer) 1
    127.0.0.1:6379> hget news1 title
    (nil)
    
    10.hexists    判断是否存在
    127.0.0.1:6379> hexists news1 title
    (integer) 0
    127.0.0.1:6379> hexists news1 content
    (integer) 1
    #0表示不存在,1表示存在
    
  • 相关阅读:
    集合:List接口的实现类(ArrayList、LinkedList、Vector)
    IDEA:断点调试
    集合:Collection接口(常用方法、遍历)
    cookie中不能存储特殊字符的解决方案
    js:ES6中的类和对象、构造函数和原型
    jq:尺寸、位置(尺寸&位置)
    jq:插件(瀑布流、图片的懒加载、全屏滚动)
    jq:效果(显示、隐藏、切换、淡入淡出效果、自定义动画)
    jq:样式操作(返回css样式属性的值、修改属性的值、设置样式的方法)
    js:client、scroll(client与scroll)
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11563620.html
Copyright © 2020-2023  润新知