接触到Redis是因为某天同事告诉说我的某集群里的一台服务器的redis服务有未授权漏洞,可以直接访问redis服务,甚至将自己的公钥写入该用户的~/.ssh/authorized_keys中,直接登录到该服务器上。 这个漏洞其实是很早之前就有,具体可以参照阿里云上的介绍

介绍

Redis的几个特点:

  • 内存key-value数据库,性能很好;也可以将数据持久化到磁盘中,不过想来不会太美
  • 开源,使用c编码,总共40K+
  • 数据可以复制到任意数量的从服务器中,可以做分布式
  • 支持的数据类型丰富,如字符串、Hash、集合、列表、有序列表、地理空间订阅
  • 原子操作,支持事务
  • 支持lua脚本

Redis可以用做数据库、缓存、消息队列。

安装

ubuntu可以直接apt-get安装,centos6上还需要源码安装,比较简单。Redis比较特别的一点是它不会拷贝redis.conf到/etc/下,要手工拷贝,并且默认配置是不开认证的。

使用

类似mysql,Redis以Daemon形式提供服务,用户可以使用redis-cli命令行工具,或者桌面的Redis Desktop Manager登录到Redis服务上来操作数据。 下面贴几行Redis操作的例子。

#String
redis 127.0.0.1:6379> SET mykey "heihei"
OK
redis 127.0.0.1:6379> GET mykey
"heihei"

#hash
redis 127.0.0.1:6379> HMSET myhash name "xiaoming" age 8 gen male
OK
redis 127.0.0.1:6379> HMGET myhash name
1) "xiaoming"

#集合
redis 127.0.0.1:6379> SADD myset aaa
(integer) 1
redis 127.0.0.1:6379> SADD myset bbb
(integer) 1
redis 127.0.0.1:6379> SADD myset aaa
(integer) 0
redis 127.0.0.1:6379> SADD myset ccc
(integer) 1
redis 127.0.0.1:6379> SMEMBERS myset
1) "bbb"
2) "ccc"
3) "aaa"

感受下就好了,还有其他的类型。Redis没有表的概念,但是可以分为多个DB。

编码

Java开发者可以使用Jedis包来操作Redis。


以上详细内容都可以比较方便的Google到,就不在这做搬运工了。

越来越水,我都不能原谅自己了