本文不涉及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";

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

2018/1/9 redis学习笔记(一)的更多相关文章

  1. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  2. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  3. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  4. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  5. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  6. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  7. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  8. Redis学习笔记(二)-key相关命令【转载】

    转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...

  9. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

随机推荐

  1. centos6+cdh5.4.0 离线搭建cdh搭建

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  2. [国嵌笔记][030][U-Boot工作流程分析]

    uboot工作流程分析 程序入口 1.打开顶层目录的Makefile,找到目标smdk2440_config的命令中的第三项(smdk2440) 2.进入目录board/samsung/smdk244 ...

  3. 《JavaScript设计模式与开发实践》知识点笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...

  4. JavaScript变量声明与提升

    一直以来对变量提升都是比较模糊的,今天特地看了一下这个知识点,总结一下. 1.举个最简单的例子来说一下什么是变量提升吧. function foo(){ console.log(x); // unde ...

  5. 工作小结(关于webpack)

    今天在工作中遇到了一个新问题,是关于webpack的. 是这样的,我在项目中添加了一个新页面,修改完配置文件后,开始运行,刚开始并没有什么问题,很顺利,后来我又添加了一个页面,然后修改配置文件,然后运 ...

  6. Linux中安装opencv-3.3.1

    在ubuntu16.04中安装opencv3.3.1的过程中踩了许多坑.一开始直接安装还挺顺利但运行程序时总是提示libgtk2.0-dev和pkg-config没有安装,在安装这两个包的过程中也不顺 ...

  7. SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

    SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFact ...

  8. Qt布局操作

    Qt界面布局是用来界面上控件排序的,例如对齐.自适应分辨率等都要用到布局. Qt界面布局跟Visual Studio系列完全不一样,VS系列的操作很简单,一般情况下,很快就能入手了,但比较死板(特别是 ...

  9. Spark高可用集群搭建

    Spark高可用集群搭建 node1    node2    node3   1.node1修改spark-env.sh,注释掉hadoop(就不用开启Hadoop集群了),添加如下语句 export ...

  10. two Pass方法连通域检测

    原理: Two-Pass方法检测连通域的原理可参见这篇博客:http://blog.csdn.net/lichengyu/article/details/13986521. 参考下面动图,一目了然. ...