如何java 注解 redis掉去掉框架中的redis

首页制式『 OR 』
欢迎您的到来,专注JavaWeb开发
欢迎您的到来,专注JavaWeb开发
欢迎您的到来,专注JavaWeb开发
欢迎您的到来,专注JavaWeb开发
当前位置: > > > 正文
验证消息:JavaWeb1024
下一条:没有了
相关新闻:
Eclipse 中报Unhandled event loop exception Java heap space(如果是JS导致的)...
Mysql 关于锁会话1(system@localhost)[king]12:18:53>(system@localhost)[king]...
这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾...
微信关注我们
随时获取最新网站资讯最近想用springmvc + redis 搭建一个框架,做做redis缓存
[问题点数:40分,结帖人robotta]
最近想用springmvc + redis 搭建一个框架,做做redis缓存
[问题点数:40分,结帖人robotta]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。带有详细注释的 Redis 3.0 代码 () - 推酷
带有详细注释的 Redis 3.0 代码 ()
Redis 3.0 源码注释
本项目是注释版的 Redis 3.0 源码, 原始代码来自:
这份注释是我在创作新版《Redis 设计与实现》期间, 为了了解 Redis 的内部实现而制作的, 所有在书中有介绍的内容, 在源码中都进行了相应的注释。
在注释的过程中, 除了少量空格和空行方面的调整外, 没有对原始代码进行任何其他改动, 最大程度地保证了代码的“原汁原味”。
希望这份注释源码能给大家学习和了解 Redis 带来一点帮助。
正在各大网店发售中,
也正在接受报名, 如果这两个项目能获得大家的支持的话, 我将不胜感激。
黄健宏(huangz)
2014 年 6 月 28 日
附录:各个源码文件的作用简介
双端链表数据结构的实现。
ae_epoll.c
ae_evport.c
ae_kqueue.c
ae_select.c
事件处理器,以及各个具体实现。
Redis 的异步网络框架,内容主要为对 socket 库的包装。
AOF 功能的实现。
asciilogo.h
保存了 Redis 的 ASCII LOGO 。
Redis 的后台 I/O 程序,用于将 I/O 操作放到子线程里面执行, 减少 I/O 操作对主线程的阻塞。
二进制位操作命令的实现文件。
用于实现 BLPOP 命令和 WAIT 命令的阻塞效果。
Redis 的集群实现。
Redis 的配置管理实现,负责读取并分析配置文件, 然后根据这些配置修改 Redis 服务器的各个选项。
计算 CRC 校验和。
数据库实现。
调试实现。
字典数据结构的实现。
endianconv.c
endianconv.h
二进制的大端、小端转换函数。
一些移植性方面的宏。
utils/generate-command-help.rb
程序自动生成的命令帮助信息。
hyperloglog.c
HyperLogLog 数据结构的实现。
整数集合数据结构的实现,用于优化 SET 类型。
Redis 对字符串和 RDB 文件进行压缩时使用的 LZF 压缩算法的实现。
Makefile.dep
构建文件。
内存测试。
mkreleasehdr.sh
用于生成释出信息的脚本。
Redis 的事务实现。
networking.c
Redis 的客户端网络操作库, 用于实现命令请求接收、发送命令回复等工作, 文件中的函数大多为 write 、 read 、 close 等函数的包装, 以及各种协议的分析和构建函数。
Redis 的数据库通知实现。
Redis 的对象系统实现。
快速排序(QuickSort)算法的实现。
发布与订阅功能的实现。
伪随机数生成器。
RDB 持久化功能的实现。
redisassert.h
Redis 自建的断言系统。
redis-benchmark.c
Redis 的性能测试程序。
负责服务器的启动、维护和关闭等事项。
redis-check-aof.c
redis-check-dump.c
RDB 文件和 AOF 文件的合法性检查程序。
redis-cli.c
Redis 客户端的实现。
Redis 的主要头文件,记录了 Redis 中的大部分数据结构, 包括服务器状态和客户端状态。
redis-trib.rb
Redis 集群的管理程序。
记录和生成 Redis 的释出版本信息。
replication.c
复制功能的实现。
Redis 对文件 I/O 函数的包装, 在普通 I/O 函数的基础上增加了显式缓存、以及计算校验和等功能。
scripting.c
脚本功能的实现。
SDS 数据结构的实现,SDS 为 Redis 的默认字符串表示。
sentinel.c
Redis Sentinel 的实现。
setproctitle.c
进程环境设置函数。
SHA1 校验和计算函数。
满查询功能的实现。
solarisfixes.h
针对 Solaris 系统的补丁。
SORT 命令的实现。
同步 I/O 操作。
testhelp.h
测试辅助宏。
t_string.c
定义了 Redis 的各种数据类型,以及这些数据类型的命令。
各种辅助函数。
valgrind.sup
LZF 压缩算法的相关文件。
记录了 Redis 的版本号。
ZIPLIST 数据结构的实现,用于优化 LIST 类型。
ZIPMAP 数据结构的实现,在 Redis 2.6 以前用与优化 HASH 类型, Redis 2.6 开始已经废弃。
内存管理程序。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致让天下没有难学的技术
《Redis官方教程》-Redis安全
《Redis官方教程》-Redis安全
译者:humyna
本节提供了Redis安全主题概述,包括控制访问、代码安全以及诸于恶意注入攻击拦截等。
对于安全相关的交流可以在github上建一个issue;如果担心沟通的安全,可以使用文末的GPG密钥。
Redis一般安全模型
Reids被设计用于在信任的环境中访问的被授权客户端使用,这意味着将Redis直接暴露到internet上,或者直接被环境中的非授权的客户端通过TCP端口访问都不是一个好的主意。
例如,一个web应用使用Redis作为数据库、缓存或者消息系统,前端生成页面、执行请求操作或者web应用用户触发操作均将访问Redis。在这种情况下,web应用应对不受信任的客户端的进行访问控制。
这是一个具体的例子,但是,一般情况下,非授信访问Redis必须被实现了ACLs层进行访问控制:校验用户输入以决定哪些操作可以被Redis实例执行。
总的来说,Redis并不为了提高安全优化,而是在高性能和易用性方面进行优化。
除了网络中信任的客户端能够访问Redis端口,其他请求应拒绝访问。因此运行Redis的服务器只能被使用Redis实现应用程序的计算机访问。
对于一台电脑直接暴露在互联网的情况,如虚拟机(Linode…),应该使用防火墙阻止外部访问Redis端口。客户端应该通过环回接口访问Reids.
注意可以在redis.conf文件添加一行如下配置绑定Redis到单个接口上:
bind 127.0.0.1
由于Redis设计的初衷,如果不能成功阻止外部访问Redis端口,会有很大的安全影响。外部攻击者使用一个FLUSHALL命令就可以删除整个数据集。
身份验证功能
虽然Redis没有实现访问控制,但它提供了一个简单的身份验证功能,该功能是一个可选功能,可以通过编辑redis.conf文件打开。
身份验证功能生效,Redis将拒绝所有未经身份认证的查询请求。客户端可以通过发送(AUTH 密码)命令进行身份认证。
密码被管理员明文配置在redis.conf文件中。它需要足够长,防止被暴力破解。原因有两点:
Redis的查询服务非常快,外部客户端每秒可以进行多次密码测试。
Redis密码存储在redis.conf文件中和客户端的配置中,系统管理员无需记住密码,因此它可以很长。
身份验证层是一个可选的冗余层,如果防火墙或其他保护Redis安全的系统被攻破,对于不知道授权密码的情况下,攻击者仍不能访问Redis.
像其他Redis命令一样,AUTH命令是明文传输的,所以仍然不能阻止那些获得网络访问权限的攻击者的嗅探。
数据加密支持
Redis不支持加密,为了实现信任的伙伴通过互联网或不信任的网络的访问设置,实现了一个附加的保护层,比如SSL代理。我们推荐.
禁用特定命令集
Redis可以禁用命令或者重命名命令,对于正常的客户端限制使用特定的命令集。
例如,一台虚拟化服务器提供了管理redis实例的服务。在这个环境中,正常用户不能调用CONFIG命令修改实例的配置信息,但是管理员可以。
在这种情况下,不仅可以重命名命令,而且可以完全隐藏掉命令。这个特性可以通过在 redis.conf文件中配置来实现。如:
rename-command CONFIG b840fc02dcc15f59e41cb7be6c52
在上面的例子中,CONFIG 命令被重名为无法猜测的名字。当然也可以通过重名为空字符来完全禁用它(或别的命令),如下面的示例所示:
rename-command CONFIG ""
外部特定输入触发攻击
还有一类攻击,攻击者无需拥有访问权限就能从外部触发。其中一个例子就是利用了插入数据到Redis的能力来触发,因为 Redis内部组件的数据结构的实现算法太复杂。
例如,攻击者可以通过WEB表单提交一串已知字符集,通过散列成相同的桶到散列表中将O(1)期望时间(平均时间)变成了O(N)的最坏情况,消耗了更多的CPU计算,最终导致拒绝访问。
为了阻止这种攻击,Redis对于散列函数使用了一个预执行的伪随机数种子。
Redis使用了qsort 算法实现了SORT命令。当前,这个算法不是随机的,因此存在因特定输入触发产品最坏情况的可能。
字符串转义和NoSQL注入
Redis协议没有字符串转义的概念,所以在正常环境中使用正常的客户端库是无法注入的。协议使用前缀长度的字符串,且是完全二进制安全的。
使用EVAL和EVALSHA命令执行Lua脚本时也遵循相同的规则,因而这些命令也是安全的
然后,需要避免使用不被信任的来源的字符串组合Lus脚本这种奇怪的用例。
Redis的默认设置允许客户端访问所有的命令集,但是访问实例不能导致控制运行Redis的系统的能力。
在内部,Redis使用众所周知的实践来写安全的代码,以阻止缓冲区溢出,格式化漏洞和内存损坏漏洞。
然而,使用CONFIG 命令控制服务配置的能力使得客户端能改变程序的工作目录和dump文件的名字,这会允许客户端在随机路径写RDB Redis文件,这是一个安全问题,容易导致用户损害系统或运行不安全的代码。
Redis不要求使用Root特权运行。鉴于此,推荐使用一个非特权用户来运行Redis。目前,Redis作者正在调查添加一个新的配置参数来限制CONFIG SET/GET dir和其他类似运行时配置指令的可能性。这将阻止客户端在任意位置强制写Redis dump文件。
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (Darwin)
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
vI1sAEeV6ZM/uc4CDI3E2TxEbQ==
[expires: ]
Key fingerprint = E5F3 DA80 35F0 2EC1 47F9 020F E5C 88D6
uid Salvatore Sanfilippo
[expires: ]
原创文章,转载请注明: 转载自本文链接地址:
Latest posts by humyna ()
Related posts:
(2 votes, average: 5.00 out of 5)
Loading...
(window.slotbydup=window.slotbydup || []).push({
id: '980251',
container: s,
size: '300,80',
display: 'inlay-fix'

我要回帖

更多关于 spring redis缓存注解 的文章

 

随机推荐