redis概览

时间:2022-02-13 06:41:04

  Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。

redis和memcache的區別:
  • Memcached是多线程,而Redis使用单线程。(个人认为Memcached在读写处理速度上优于Redis)
  • Memcached使用预分配的内存池的方式,Redis使用现场申请内存的方式来存储数据,并且可以配置虚拟内存。
  • Redis可以实现持久化(也就是说redis需要经常将内存中的数据同步到硬盘中来保证持久化),主从复制,实现故障恢复。
  • Memcached只是简单的key与value,但是Redis支持数据类型比较多。包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。

Redis支持两种持久化方式:

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。

            这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。

          因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。

appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,

          always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

(1):snapshotting(快照)也是默认方式.(把数据做一个备份,将数据存储到文件)

快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写到二进制文件中,默认的文件名称为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key键修改就自动做快照.

(2)Append-only file(缩写aof)的方式

aof方式:由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

安装Redis:

Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OS X, Solaris等)上安装运行。而且Redis并不依赖任何非标准库,也没有编译参数必需添加。redis的安装出奇的简单,这可能也是他风靡的一个原因,让人很容易上手,不像某些东西,编译阶段就能让人完全绝望。

先去官网下载源码:

wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz

解压:

tar –zxvf redis-2.4.6.tar.gz

编译

需要说明的事,redis的安装非常简单,已经有现成的Makefile文件,直接运行make命令即可。

make

make install

Redis 由四个可执行文件:redis-benchmark、redis-cli、redis-server、redis-stat 这四个文件,加上一个redis.conf就构成了整个redis的最终可用包。它们的作用如下:

redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况
现在就可以启动redis了,redis只有一个启动参数,就是他的配置文件路径。

redis-server /etc/redis.conf

注意,默认复制过去的redis.conf文件的daemonize参数为no,所以redis不会在后台运行,这时要测试,我们需要重新开一个终端。修改为yes则为后台运行redis。另外配置文件中规定了pid文件,log文件和数据文件的地址,如果有需要先修改,默认log信息定向到stdout.

下面是redis.conf的主要配置参数的意义:

daemonize:是否以后台daemon方式运行
pidfile:pid文件位置
port:监听的端口号
timeout:请求超时时间
loglevel:log信息级别
logfile:log文件位置
databases:开启数据库的数量
save * *:保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
这时你可以打开一个终端进行测试了,配置文件中默认的监听端口是6379

我们可以开启一个Redis客户端进行测试

[root@SNDA-192-168-1-114 ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf
[root@SNDA-192-168-1-114 ~]# redis-cli
redis 127.0.0.1:6379> quit

常用命令:
实例
ping     测试是否连通,检查服务器是否正在运行

redis-cli -h host -p port -a password 连接redis

redis-cli  -n 0 -p 26379 --scan --pattern  "\"oc_dcs_db_*\"" 模糊匹配oc_dcs_db_大头的key
monitor     监控
AUTH   认证 
config get *    获取所有配置
config get slaveof 获取slaveof的值
config get *of*  获取含of的配置的值
config set name value   设置配置
info        Redis统计信息
info stats
info cpu
key
exists  key   判断键是否存在
KEYS pattern   查找与指定模式匹配的所有键,获取所有键使用keys *
ttl  key  获取键的过期时间
expire key seconds  设置键的过期时间
persist key  删除过期的键

RANDOMKEY 获取随机键

RENAME key newkey 更改键的名称
RENAMENX key newkey  重命名键,如果新的键不存在
type     key       返回键值类型
del   key     删除键  del huzj

DUMP key  该命令返回存储在指定键的值的序列化版本。

MOVE key db   移动键到另一个数据库  MOVE tutorial1 1
db
flushdb   清除库中内容
flushall    清除所有库中内容
select     切换库   切换db0  select 0
save       创建当前库的备份
BGSAVE   后台备份
dbsize      当前数据库键的数量   查看有多少键 dbsize
shutdown    停掉redis服务
eval              使用lua解释脚本
String类型相关命令:
set   将字符串value关联到key
get  获取键值
incr   
        命令用于由一个递增key的整数值。如果该key不存在,它被设置为0执行操作之前。如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。该操作被限制为64位带符号整数。
incrby 
        命令用于增加存储在由指定的值key的数量。如果该key不存在时,它被设置为0执行操作之前。如果键包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误
INCRBYFLOAT
        给浮点数增加指定值
decr  减
descby 减少指定值
strlen   获取键长
append  追加
Lists类型相关命令:
lpush 插入列表头
rpush  插入列表尾
lrange  查找执行范围的键值
lpop     移除并返回列表的头元素
llen    返回列表长度
sets类型相关命令:
sadd  创建集合并添加元素
smembers   返回成员
sismember   判断键值是否属于集合
sunion      集合合并
sdiff          集合差集
sinter        集合交集
zsets类型相关命令:
zadd
zrange
zrangebyscore
zscore
zcount
hashes类型相关命令:
HKEYS  返回哈希表key中的所有域
HVALS 返回哈希表key中所有域的值
HMSET 
HMGET  返回哈希表给定域一个或多个值
HGETALL 返回所有域和值  
HGETALL  component:272
HSET   设置阈值
hset component:272 api "{\"default\":\"com.tycredit.portal.service.service.CisReportPnlApplydataService:selectByParam\"}"

事务处理相关命令

MYULTI 开始事务
EXEC  执行
DISCARD  撤销事务
WATCH 检测键值变化

订阅相关命令

SUBSCRIBE   发布
PUBLISH      订阅
Redis的存储容灾性比较完善,所支持的存储数据类型比较全。比较坑的是版本2.X之下都不支持服务器集群,只能单机。在Redis 3.0中服务器集群功能才亮相。 操作起来总体感觉比较简单容易上手。