本文不涉及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. 二 @ResponseBody用法

    @ResponseBody底层是通过response.getwriter()方法将数据写回前 台 @ResponseBody @RequestMapping (value="/queryLi ...

  2. 97、爬虫框架scrapy

    本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息   一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...

  3. Aliase_小白学Python_Day0_前言

    听到有老师介绍,说你为什么不把你的学习过程保存下来,一是当做总结,二是作为分享.我想,也对.这算是我的第一个博客,本次想写写我为什么选择学习Python. 很多人都问过我一个问题,行业那么多,你为什么 ...

  4. 百万级别QPS轻量级PHP框架Steeze介绍

    系统简介   Steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现. 支持swoole模型运行,支持容器.模 ...

  5. js的join和split

    1,split   将字符串转为数组 第一个参数必须,可以是字符串和正则表达式,表示从该地方开始分割字符串:第二个参数可选,表示返回数组的最大长度. split():把整个字符串塞入一个数组中 spl ...

  6. JVM之对象的创建简要流程

  7. 关于win10企业版1607累积更新(KB4013429)安装失败后,个人的解决办法

    最近连续一个多星期更新(1607-KB4013429)失败,更抓狂的是windows不厌其烦的,不断下载,不断更新,导致每天打开电脑都要等个十几分钟,看来不解决是不行了. 网上一查,有各种解决版本 1 ...

  8. Oracle实战笔记(第七天)之PL/SQL进阶

    一.控制结构 控制结构包括:判断语句(条件分支语句).循环语句.顺序控制语句三种. 1.条件分支语句 if--then:简单条件判断 --编写一个过程,可以输入一个雇员名,如果该雇员名的工资低于200 ...

  9. js随机生成验证码及其颜色

    今天迎来了2018年第一场雪,这个美好的日子,总的写点什么纪念一下,在这里写了一个在js中使用Math.random()函数,随机生成四位数的验证码及其验证码换颜色. js代码如下: var arra ...

  10. sqlserver存储过程及mybatis调用——待续

    创建带输入参数存储过程 use yanantestgoif exists (select * from sys.objects where name='yanan')drop procedure ya ...