最新消息:

Redis专题一、简介、安装和使用

IT技术 ipcpu 2248浏览

Redis专题一、简介、安装、使用.md

一、Redis简介

Redis是一个开源的基于内存的高性能键值对(Key-Value)数据库。采用C语言编写,运行效率极高。他通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。

到目前为止,Redis支持的键值数据类型如下:

字符串类型(String)
哈希散列类型(Hash)
列表类型(List)
集合类型(Set)
有序集合类型(zset)

二、redis和memcached对照

redis存储的数据可以持久化,数据写入磁盘,重启后不会丢失,Memcached没有持久化,重启后数据丢失。

redis支持丰富的数据类型,包括字符串、哈希、列表和集合等,Memcached仅支持字符串。

redis支持Master-Slave的主从数据复制,Memcached不支持。

三、Redis的安装

Redis常见版本有2.8.X版本、3.2.X版本和现在官方稳定4.0.X版本。
Redis从3.0 新增了集群Cluster功能 。从4.0引入了模块系统优化了PSYNC主从复制策略。

wget http://download.redis.io/releases/redis-3.2.10.tar.gz
tar zxvf redis-3.2.10.tar.gz
cd redis-3.2.10
#@编译jemalloc
cd deps/jemalloc 
./configure && make
#@编译redis
cd -
make PREFIX=/home/app/redis/ install
#@启动Redis,配置文件源码包里有
/path/redis-server /path/redis.conf 

Redis安装成功后,会在安装目录发现以下文件,用途如下
redis-server   Redis服务器
redis-cli     命令行客户端
redis-sentinel   软链接到redis-server
redis-benchmark   Redis性能测试工具
redis-check-aof    AOF文件修复工具
redis-check-dump   RDB文件检查工具

四、Redis基本用法

存储一个KEY,然后获取

# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"

Redis默认支持16个数据库,可以通过配置参数database修改数量。Redis和我们常用的数据库不一样,他的数据库命名是通过0-15的数字(默认的16个数据库)命名的,客户端连接后会默认选择第0个数据库,如果需要切换可以使用select命令切换。

127.0.0.1:6379> get foo
"abc"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get foo
(nil)
127.0.0.1:6379[1]> 

Redis不支持自定义数据库名,也不支持每个数据库一个帐号密码,只要能访问数据库0,就能访问其他的每个数据库,并且每个数据库并不是完全隔离的,比如flushall命令,可以清空整个Redis实例中的所有数据。

以下是几个简单常用命令

#@1.    获取符合规则的键名列表
127.0.0.1:6379> keys *
1) "ipcpu"
2) "foo"
#@2.    判断键是否存在,返回的是数量
127.0.0.1:6379> exists foo
(integer) 1
#@3.    删除键,删除成功返回1,否则返回0
127.0.0.1:6379> del ipcpu
(integer) 1
127.0.0.1:6379> del ipcpu
(integer) 0
#@4.    获得键值的数据类型
127.0.0.1:6379> type foo
string

提示

  1. redis命令是不区分大小写,但是键名和键值区分大小写。
  2. keys命令是需要遍历Redis中所有的键的,当键很多时,很耗费性能。生产环境中慎用。

五、操作系统参数调整

默认启动Redis的情况,请查看redis日志,如果有警告信息,请尽快修复。如下是我遇到的警告

5718:M 11 Dec 10:57:45.953 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
5718:M 11 Dec 10:57:45.953 # Server started, Redis version 3.2.10
5718:M 11 Dec 10:57:45.953 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
5718:M 11 Dec 10:57:45.953 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
5718:M 11 Dec 10:57:45.953 * DB loaded from disk: 0.000 seconds
5718:M 11 Dec 10:57:45.953 * The server is now ready to accept connections on port 6379

主要有以下几点问题要修复

#@1.    TCPBacklog设置过小
echo 4096 > /proc/sys/net/core/somaxconn
#@2.    vm.overcommit_memory设置为0
sysctl vm.overcommit_memory=1
#@3.    THP未禁用
echo never >  /sys/kernel/mm/transparent_hugepage/enabled

五、参考资料

http://gad.qq.com/article/detail/29299 (redis各版本新增功能汇总)
http://irfen.me/redis-learn-2/
https://cachecloud.github.io/2017/02/16/Redis%E7%9A%84Linux%E7%B3%BB%E7%BB%9F%E4%BC%98%E5%8C%96/

转载请注明:IPCPU-网络之路 » Redis专题一、简介、安装和使用