zoukankan      html  css  js  c++  java
  • 2018/1/9 redis学习笔记(一)

    本文不涉及redis基本命令以及javaapi的解释操作;

    首先介绍下redis,一个nosql非关系型数据库,运行在缓存中,特点就是可存储的数据结构类型很多,做为KEY-VALUE数据库,它的键只能是String,而值则可以是String,Set,Hash,List,sorted set;

    String类型就是字符串,Set的话就是存取无序并且不可重复的集合,Hash是一个HashMap集合,一个保存field映射到value映射关系的映射表,value是Set数据类型;但是有一点要注意的是,redis里的Hash创建的存储对象是hashtable,但存储的数据结构则是zipmap;相比普通的map存储,zipmap占用的内存更少,但因为是压缩数据,对其进行操作时要先进行解压,所以效率要低一些.List则是双向链表,我们可以用来实现队列和堆栈数据结构.sorted set的话,就是有序的set,并且可以自定义区间保存数据;

    redis持久化方式:

    一:快照方式(默认持久化方式)

    就是在一定时间进行一定次数的操作后(次数和时间可自选,详情百度)自动将redis内存中的所有数据(是所有,而不是对比落地数据和缓存数据后保存新增数据)持久化到dump.rdb文件中,当然客户端也可以手动更新,使用save和bgsave,但要注意的是,redis是单线程程序,所以在手动save的时候会阻塞所有客户端请求.

    二:日志追加方式

    这种方式就是redis每收到一个写命令都会追加到appendonly.aof文件中,并可手动配置持久方方案,需要在配置文件中自行设置.此种方式默认是关闭的;

    如何使用redis命令达到类似sql查询语句的效果???

    一个具体代码例子:

     private static final msex = "man";

    private static final  wsex= "woman";

    private static fin  age = "25";

    private static Jedis jedis =  new Jedis("192.....","6379");

    public void test(){

    String mtwperson = gson.formObj(new person("man",25);

    String womtwperson = gson.formObj(new person(woman,"25"));

    String mtsperson =  gson.formObj(new person("man","26"));

    Map map = new HashMap();

    String UUID1 = new UUID.tostring();

    map.put(UUID1,mtwperson );

    jedis.sadd("msex",);

    String UUID2 = new UUID.tostring();

    jedis.sadd("age",UUID1 );

    jedis.sadd("msex",mtsperson );

    .......//后面实在懒得写了,反正就是这么个思路,一个uuid对应一个person对象,然后根据条件将uuid加到相应的set集合中.之后以uuid为键,person对象为值,存入map中,最后将map存入redis中.

    这样就能利用并集交集等操作来进行一个条件判断了;

    }

    再之后就是利用Lua脚本来对redis进行操作;
    下载lua脚本就不说了,我是在linux上进行操作的,具体百度,不过别忘记想yum -y install gcc 来安装下载gcc,因为lua是C语言写的,而C和C++程序都需要进行编译;

    下面来直接写下具体的语法吧.

    print("Hello World");

    使用lua lua1.lua运行此脚本;会打印出Hello World;文件名后缀无所谓,linux无视后缀名,只是一个规范标识,但最好加上,这样以后使用通配正则进行批量操作比较方便;

    使用redis进行操作

    redis.call("set","name","yangfei");

    local name = redis.call("get","name");//local相当于声明这是一个局部变量,因为lua不允许全部变量

    return name;//是否return无所谓.和shell脚本一样,不return就会返回nil;

    运行 redis-cli --eval lua2.lua

    意味使用redis客户端解析运行脚本;

    打印出 yangfei,同时在redis中查看会发现已经有了键为name值为yangfei的数据;

    现在来点稍微复杂的吧;

    local name = redis.call("get",KEYS[1]);

    local age = redis.call("get",KEYS[2]);

    if name == "yangfei" then 

    redis.call("set",KEYS[1],AGRV[1]);

    print(age);

    end

    运行 redis-cli --eval lua3.lua name age , yf  //这里的话就是传参,和shell脚本不同的是lua脚本是有键值区别的,符号也不同,shell中使用的是{1},{2};

    打印出22,同时在redis中查看会发现yangfei 变为了yf;

    lua脚本还有表格形式

    local t1 = {};

    t1.name = "yangfei";

    t1[age] = 22;

    t1[3] = "man";

    ....//写的好累,我还是直接截图在朋友圈吧;

  • 相关阅读:
    html
    头部标签
    ajax
    分辨率
    js 运动基础
    js DOM
    js定时器
    js数组
    js基础
    例子:js简易日历
  • 原文地址:https://www.cnblogs.com/yangfeiORfeiyang/p/8258011.html
Copyright © 2011-2022 走看看