Same regex caching

Igor Sysoev igor at sysoev.ru
Thu Jul 21 18:10:22 UTC 2011


On Thu, Jul 21, 2011 at 10:53:51PM +0800, David Yu wrote:
> On Thu, Jul 21, 2011 at 10:43 PM, Igor Sysoev <igor at sysoev.ru> wrote:
> 
> > On Thu, Jul 21, 2011 at 10:18:06PM +0800, David Yu wrote:
> > > Hi,
> > >
> > > I wanted to ask if the same regex used in multiple conditions is the same
> > > cached-compiled version?
> > > Eg I need to validate the all the (sub)request params before sending it
> > > upstream:
> > >
> > > location /foo {
> > >
> > > if ($time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; }
> > > if ($arg_time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; }
> > >
> > > }
> > >
> > > #note that in the real app, I'll have lots of repeated regex for email,
> > > phone, used in every if directive
> > >
> > > location /bar {
> > >
> > > if ($arg_time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; }
> > > set_form_input $form_time time_finished;
> > > if ($form_time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; }
> > >
> > > }
> > >
> > > What I'm trying to do is send the params to redis with its lua scripting
> > > engine handling the *pre-validated* request.
> > > Redis is single-process while nginx can have multiple workers ... so its
> > > only fitting to let nginx do validation for redis :-)
> >
> > No, each regex is compiled separately.
> >
> Thanks for the quick reply.
> I'm thinking maybe the nginx map can act as the regex cache for the same
> ones.
> 
> set $map_regex_time $arg_time
> if ( !$map_regex_time) return { 400; }
> 
> set_form_input $map_regex_time time_finished;
> if (! $map_regex_time) return { 400; }
> 
> Since I'll literally have hundreds of fields using the same regex, this
> might help?

I do not understand the issue.


-- 
Igor Sysoev



More information about the nginx mailing list