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表示存在

Part_one:Redis第一次接触的更多相关文章

  1. 第一次接触终极事务处理——Hekaton

    在这篇文章里,我想给出如何与终极事务处理(Extreme Transaction Processing (XTP) )的第一次接触,即大家熟知的Hakaton.如果你想对XTP有个很好的概况认识,我推 ...

  2. [译]与TensorFlow的第一次接触(三)之聚类

    转自 [译]与TensorFlow的第一次接触(三)之聚类 2016.08.09 16:58* 字数 4316 阅读 7916评论 5喜欢 18 前一章节中介绍的线性回归是一种监督学习算法,我们使用数 ...

  3. 第一次接触FPGA至今,总结的宝贵经验

    从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表.抢答器.密码锁等实验时那个兴奋劲.当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus ...

  4. Hybird App(一)----第一次接触

    App你知道多少 一 什么是Native App 长处 缺点 二 什么是Web App 长处 缺点 三 什么是Hybrid App 长处 缺点 四 Web AppHybrid AppNative Ap ...

  5. 第一次接触C++------感触

    2018/09/24 上大学第一次接触C++,感觉还挺有趣的. C语言是计算机的一门语言,顾名思义,语言嘛,有它自己独特的语法. 第一次用C++敲代码,觉得还挺不错的,可以从中找到乐趣.咏梅老师布置的 ...

  6. 孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase

    孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase (完整学习过程屏幕记录视频地址在文末) 之前对关系型数据库的学习告一段落,虽然能力所限没有能够完全完成理想中的所有数据库操 ...

  7. 百度地图API的第一次接触

    因为项目的需求,第一次接触了百度API. 第一步:引用百度地图API的脚本 如果在局域网环境中,要把地图文件和js文件都要下载下来 <script type="text/javascr ...

  8. 第一次接触数据库(SQLite)

    第一次接触,学了创建列表 + 行的删除 + 内容的更改 + 删除列表 第一次接触要知道一些基本知识 NULL(SQL) = Nnoe(python)  #空值 INTEGER = int  #整数 R ...

  9. .NET 下第一次接触Redis数据库

    关于Redis 1.简介 Redis是著名的NOSQL(Not Only SQL)数据库,是键值对结构.(我只用过键值对结构的) 他为存储键值对做了优化,在大型网站中应用广泛.Redis提供了数据的自 ...

随机推荐

  1. Spring Boot 项目 application.properties配置说明

    #======================================================================================# ★☆★☆★☆★☆★☆ ...

  2. OpenTK学习笔记(1)-源码、官网地址

    OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...

  3. WAL streaming (max_wal_senders > 0) requires wal_level "replica" or "logical"

    初次使用pg的11版本,执行以下操作修改归wal_level设置: alter system set set wal_level='minimal'; 尝试重启pg,发现重启失败,并报错: waiti ...

  4. Jenkins参数化构建--Git Parameter

    由于我们在测试过程中,可能需要在多个测试环境跑用例,这个时候就需要jenkins参数化了. Jenkins参数化一般常用的有两种方式:Choice和String Parameter两种 (1)Choi ...

  5. 纯CSS样式实现数字加减按钮的最佳方案

    前言: 对于数字加减按钮的实现,以前用过不少方案,诸如: 1.使用背景图片——这种效果比较好,缺点是样式控制有点复杂了,还需要使用图片: 2.直接使用“+”“-”——这种方法简单粗暴,最容易实现,缺点 ...

  6. CefSharp 提示 flash player is out of date 运行此插件 等问题解决办法

    CefSharp 提示 flash player is out of date 或者 需要手动右键点 运行此插件 脚本 等问题解决办法 因为中国版FlashPlayer变得Ad模式之后,只好用旧版本的 ...

  7. Java 枚举使用总结

    目录 1.枚举基础 1.1.创建枚举最简单的方式 1.2.简单使用 2.枚举的构造方法 2.1.使用注释方式说明 2.2.使用构造方法 2.3.使用带有构造器的枚举 3.就这些了? 3.1.需求 3. ...

  8. Nginx 配置 stream SSL 第四层 代理

    场景:服务器F针对访问终端需要添加白名单操作,由到终端数量较多,所以用了一台代理服务器 P,在服务F中添加 服务器P IP地址的白名单,所有终端访问服务器P 由于我已经安装过 Nginx 所以只需要添 ...

  9. 将map对象参数转换成String=String&方式

    * 将map对象参数转换成String=String&方式 * @param params * @param charset * @return * @throws UnsupportedEn ...

  10. linux centos7 防止暴力破解

    系统 centos 7.4 系统, 不知道的可以用 cat /etc/redhat-release 查看 利用到了linux 系统的日志,每次我们登陆服务器时,如果有登陆认证失败的情况,会在服务器的/ ...