JavaWeb_day8_Linux&redis

Linux基本操作

Linux目录结构

bin:存放二进制执行文件

sbin: 存放二进制执行文件,只有root才能访问

usr:存放共享的系统资源  usr下的profile文件是配置环境变量

home:家目录

 

切换目录:

cd usr  切换到该目录下的usr目录

cd ../   切换到上一级目录

cd /    切换到根目录

 

创建目录 mkdir 目录名称

创建多级目录:  mkdir -p  aa/bb    (如果有aa不会报错,没有就会创建aa)

查看目录

ls 目录:查看该目录下的所有目录和文件    

ls -a 目录:包括隐藏文件

ls -l  目录:查看该目录下的所有目录和文件的详细   可缩写为 ll

寻找目录  

如查找/root下的与test相关的目录(文件) find /root -name ‘*test*’

查找文件里符合条件的字符串

grep lang anaconde-ks.cfg      在文件中查找lang

grep lang anaconde-ks.cfg   --color    在文件中查找lang,并高亮显示

修改目录名称   mv 旧名称  新名称

移动目录位置—剪切   mv 名称  新位置

复制目录 cp -r        r代表递归拷贝   文件不需要-r

如:将/usr下的newTest拷贝到根目录下的test  cp -r /usr/newTest /test

删除目录   rm -rf  目录

 

创建文件  touch 文件名

查看文件  cat/more/less/tail 文件

cat只能显示最后一屏内容

more可以显示百分比,回车可以向下一行,  空格可以向下一页,q可以退出查看

less可以使用键盘上的PgUp和PgDn向上      和向下翻页,q结束查看

tail -10 查看文件的后10行,Ctrl+C结束

tail -f 文件   可以对某个文件进行动态监控

修改文件内容   vi vim

 

压缩文件 tar -zcvf

Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。

打包并压缩后的文件的后缀名一般.tar.gz。

命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件

其中:z:调用gzip压缩命令进行压缩

  c:打包文件

  v:显示运行过程

  f:指定文件名

示例:打包并压缩/test下的所有文件 压缩后的压缩包指定名称为xxx.tar.gz

tar -zcvf xxx.tar.gz /test/*

解压压缩包tar -zxvf                         -C表示指定位置

其中:x:代表解压

如:将/test下的xxx.tar.gz解压到当前目录下                tar -xvf xxx.tar.gz

如:将/test下的xxx.tar.gz解压到根目录/usr下  tar -xvf xxx.tar.gz -C /usr

 

显示当前位置  pwd

搜索命令   grep 要搜索的字符串 要搜索的文件

如:搜索/usr/sudu.conf文件中包含字符串to的行  grep to /usr/sudu.conf

关键字显示颜色                                                       grep to /usr/sudu.conf –color

管道命令  |:将前一个命令的输出作为后一个命令的输入

查看进程 :ps -ef:

杀死进程:kill -9 进程的pid

查看当前系统的端口使用:netstat -an

重定向输出>和>>

>:重定向输出,覆盖原有内容

>>:重定向输出,追加功能

cat /etc/passwd  > a.txt    将输出定向到a.txt中

cat /etc/passwd  >> a.txt    输出并且追加

 

 

权限

文件类型:

-:表示文件

d:表示目录

l:表示链接

属主u 输组g 其他用户o

rwx  421

如:修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读的权限   chmod u=rwx,g=rw,o=r aaa.txt   或 chmod 764 aaa.txt

修改字符集编码

CentOS  6   vi /etc/sysconfig/i18n

CentOS  7   vi/etc/sysconfig/locale

 

修改主机名:

临时: hostname 新的主机名

永久生效: vim /etc/sysconfig/network

 

NoSQL==Not Only SQL  泛指非关系型数据库

主流NoSql   hbase   MongoDB  Redis

什么是Redis

Redis是用C语言开发的一个键值对(key-value)数据库,

redis的应用场景

1.缓存

2.任务队列(秒杀)

 

远程连接Redis

Jedis jedis=new Jedis(host,port);  6379

//Jedis jedis=new Jedis("192.168.0.10",6379); 

jedis.set(key,value);

jedis.get(key);

jedis.close();

主要用在激活码多长时间失效(比如5分钟之内有效)

连接池:

redis的数据结构:

    redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

Redis  6379          支持五种数据类型:

字符串类型 string

哈希类型 hash(理解为map格式)

列表类型 list

集合类型 set

有序集合类型 sortedset

 

 

String(重要)

set key value:若key存在则覆盖   

get key:若key不出在,返回null

getset key value:先获取key的值,然后设置key的值

incr key:若key不存在,初始值是0    将指定的key的value原子性的递增1.

decr key: 若key不存在,初始值是0    将指定的key的value原子性的递减1.

incrby key increment:若key不存在, 初始值是0  将指定的key的value原子性增加increment

decrby key increment:若key不存在, 初始值是0  将指定的key的value原子性增加increment

append key value:如果该key存在,则在原有的value后追加该值;如果该key    不存在,则重新创建一个key/value

del key:删除key

 

hash

hset key field value:为指定的key设定field/value对(键值对)。

hmset key field1 value1 field2 value2 …:设置key中的多个filed/value

hget key field:返回指定的key中的field的值

hmget key field1 field2 …. 获取key中的多个filed的值

hgetall key:获取key中的所有filed-vaule

hexists key field:判断指定的key中的filed是否存在,存在为1,不存在为0

hlen key:获取key所包含的field的数量

hincrby key field increment:设置key中filed的值增加increment,如:age增加20

hdel key field:删除某一个值

del key:删除所有值

 

List

lpush key value1 value2.. :在list的头部插入所有的values

rpush key value1 value2.. :在list的尾部插入所有的values

lrange key start end:若为-1则表示链表尾部的元素,-2则表示倒数第二个

如:lrange key 0 -1

lpushx key value:在list的头部插入所有的values,仅当参数中指定的key存在时(没有不行,插入不进去)

rpushx key value:在list的尾部插入所有的values,仅当参数中指定的key存在时

lpop key:取出头部元素

rpop key:取出尾部元素

rpoplpush resource destination:取出resource的尾部元素放到destination的头部元素

llen key:显示链表中的元素数量

lset key index value:0表示头元素,-1表示尾元素  修改指定位置的元素

lrem key count value:删除count个值为value的元素 若count>0, 从头向尾删除,若count<0,从尾到头,若count=0,则删除指定的所有的value元素

linsert key before|after 元素 value:在指定的元素前或后插入元素

set  set集合中不允许出现重复的元素

sadd key value1 value2:向set中添加数据

smembers key:获取set中所有的成员

scard key:获取set中成员的数量

sismember key member:判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在

srem key member1、member2…:删除set中指定的成员

srandmember key:随机返回set中的一个成员

sdiff key1 key2:返回key1有,而key2没有的

sdiffstore destination key1 key2:将key1有,而key2没有的的成员存储在destination上

sinter key[key1,key2…]:返回交集(都有的)

sinterstore destination key1 key2:将返回的交集存储在destination上

sunion key1、key2:返回并集

sunionstore destination key1 key2:将返回的并集存储在destination上

 

sortedset:不允许重复元素,且元素有顺序

它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然    而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)       却是可以重复的。

zadd key score member score2 member2 … :将所有成员以及该成员的分数存放到sorted-set中

zcard key:获取集合中的成员数量

zrange key 0 -1 [withscores]:获取成员[可以看里面的分数]

zcount key min max:获取分数在[min,max]之间的成员

zrem key value:删除

通用命令:

keys  *:查询所有的键

type key:获取键对应的value类型

del key : 删除指定的kye

 

redis事务

multi:开启事务

exec:提交事务

discard:回滚事务

 

redis持久化

redis支持两种方式的持久化,一种是RDB,一种是AOF

RDB持久化(默认支持,无需配置):在指定的时间间隔内将内存中的数据集快照写入磁盘

AOF持久化:以日志的形式记录服务器处理的每一个写操作

项目中,修改比较频繁的东西放在缓存中,缓存中没有在读数据库

使用ajax方法,来页面展示下拉框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    
    <script src="js/jquery-3.3.1.min.js"></script>
    
    <script>
        $(function () {
           
            //发送ajax请求,加载所有省份数据
            $.get("provinceServlet",{},function (data) {
                //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
                //1.获取select
                var province = $("#province");
                //2.遍历json数组
                $(data).each(function () {
                    //3.创建<option>
                    var option = "<option name='"+this.id+"'>"+this.name+"</option>";

                    //4.调用select的append追加option
                    province.append(option);
                });


            });
            
        });
        
        
    </script>
    
</head>
<body>
        <select id="province">
            <option>--请选择省份--</option>
        </select>
</body>
</html>




@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        List<Province> list = service.findAll();
        //2.序列化list为json
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(list);
        //3.响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

使用缓存

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        String json = service.findAllJson();
        System.out.println(json);
        //3.响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);
    }


  /**
        使用redis缓存
     */

    @Override
    public String findAllJson() {
        //1.先从redis中查询数据
        //1.1获取redis客户端连接
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_json = jedis.get("province");
        //2判断 province_json 数据是否为null
        if(province_json == null || province_json.length() == 0){
            //redis中没有数据
            System.out.println("redis中没数据,查询数据库...");
            //2.1从数据中查询
            List<Province> ps = dao.findAll();
            //2.2将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(ps);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //2.3 将json数据存入redis
            jedis.set("province",province_json);
            //归还连接
            jedis.close();

        }else{
            System.out.println("redis中有数据,查询缓存...");
        }
        return province_json;
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guoyebing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值