1、Redis简介
Redis(REmote Dictionary Server)是一个开源的遵守BSD协议的高性能key-value数据库,Redis主要有以下几个特点:
(1)支持数据的持久化,可以将内存的数据持久化至磁盘当中,重启的时候可以再次加载使用。相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情;但是值得注意的是在对不同数据集进行高速读写时需要权衡内存,应保持数据量不能大于硬件内存。
(2)具有丰富的数据类型,不仅仅支持简单的key-value类型的数据,同时还支持list、set、hash、Strings等数据结构的存储。因此其通常被称为数据结构服务器
(3)支持数据的备份,即master-slave模式的数据备份。
(4)极高的性能,读写的速度能够达到10W次左右。
(5)丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
(6)原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全合并后的原子性执行。
2、Redis的安装
此处只介绍Windows系统下的安装方法,其他系统如Linux之类的烦请各位砖友自行了解。
下载地址如下:
https://github.com/dmajkic/redis/downloads
下载的Redis支持32位于64位,根据自己实际情况自行选择,以64位为例,将64位的下载内容copy至自定义盘符目录下,如D:\redis;之后打开一个dows窗口,并且换至目录D:\redis下,运行以下命令进行安装。
redis-server.exe redis.conf
3、Redis配置
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。
语法
Redis CONFIG 命令格式如下:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
实例
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"
编辑配置
你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。
语法
CONFIG SET 命令基本语法:
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
实例
redis 127.0.0.1:6379> CONFIG SET loglevel "notice" OK
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"
参数说明(以下只针对部分参数进行说明)
redis.conf 配置项说明如下:
(1)指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。
port 6379
(2)当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能。
timeout 300
(3)指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose
(4)指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合。
save <seconds> <changes>
Redis默认配置文件中提供了三个条件:
save 900 1//900秒内有1个更改
save 300 10//300秒内有10个更改
save 60 10000//60秒内有10000个更改
(5)指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大。
rdbcompression yes
(6)设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id。
databases 16 SELECT <dbid>
(7)指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
(8)指定更新日志条件,共有3个可选值,no:表示等操作系统进行数据缓存同步到磁盘(快);always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全);everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
4、Redis的数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合。
(1)String(字符串)
string是redis最基本的类型,一个key对应一个value,string类型是二进制安全的,可以包含任何数据。比如jpg图片或者序列化的对象。
实例
redis 127.0.0.1:6379> SET keyname "com.hundsun.lp" OK//设置key值为keyname,对应的value为com.hundsun.lp
redis 127.0.0.1:6379> GET name/获取key对应的value
"com.hundsun.lp"//key对应的value
注意:一个键最大能存储512MB。
(2)Hash(哈希----适合对象:field-value键值对形式集合,适合存储,更新用户属性)
Redis hash是一个键值对集合,是一个string类型的field和value的映射表,hash特别适合用于存储对象。
实例
redis 127.0.0.1:6379> HMSET hundsun username com.hundsun.lp password com.hundsun.lp address hz
OK
redis 127.0.0.1:6379> HGETALL hundsun
1) "username"
2) "com.hundsun.lp address"//value
3) "password"
4) "com.hundsun.lp address"//value
5) "address "
6) "hz"
redis 127.0.0.1:6379>
注:每个 hash 可以存储 2的32次幂 - 1 键值对
(3)List(列表---试用于朋友圈,消息队列实际场景)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
注:列表最多可存储 2的32次幂 - 1 元素。
(4)Set(集合-----string无序集合,不会重复,适合共同好友之类的取交集的场景)
Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
实例
redis 127.0.0.1:6379> sadd com.hundsun.lp redis
(integer) 1
redis 127.0.0.1:6379> sadd com.hundsun.lp oracle
(integer) 1
redis 127.0.0.1:6379> sadd com.hundsun.lp mysql
(integer) 1
redis 127.0.0.1:6379> sadd com.hundsun.lp mysql
(integer) 0
redis 127.0.0.1:6379> smembers redis.net.cn
1) "redis"
2) "oracle"
3) "mysql"
注意:以上实例中 mysql添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。集合中最大的成员数为 232 - 1。
(5)zset(sorted set:有序集合---带一个score,适用于排行榜的场景)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member
5、Redis命令
(1)启用客户端:redis-cli
(2)远程Redis服务客户端:redis-cli -h host -p port -a password
$redis-cli -h 127.0.0.1 -p 6379 -a "mypassword"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
(3)设置key及其值:set key value
(4)删除key值:del key
(5)检查key是否存在:exists key
(6)为给定 key 设置过期时间,以秒计:expire key seconds
(7)以毫秒为单位返回 key 的剩余的过期时间:pttl key
(8)移除 key 的过期时间,key 将持久保持:persist key
(9)查找所有符合给定模式( pattern)的 key:keys pattern
(10)返回 key 所储存的值的类型:type key
(11)查看哈希表 key 中,指定的字段是否存在:HEXISTS key field
(12)将哈希表 key 中的字段 field 的值设为 value:HSET key field value
(13)获取列表长度:llen key
(14)在列表中添加一个或多个值:rpush key value1 [value2]
(15)获取列表指定范围内的元素:lrange key start stop
(16)向集合添加一个或多个成员:sadd key member1 [member2]
(17)返回集合中的所有成员:smembers key
(18)向有序集合添加一个或多个成员,或者更新已存在成员的分数:zadd key score1 member1 [score2 member2]
(19)通过字典区间返回有序集合的成员:zrangebyscore key min max
6、HyperLogLog
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
什么是基数:
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8},
基数(不重复元素)数量为5。 基数估计就是在误差可接受的范围内,快速计算基数。
指令:
1、添加指定元素到 HyperLogLog 中:pfadd key element[element...]
2、返回给定 HyperLogLog 的基数估算值:pfcount key
7、Redis 发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
创建订阅频道:subscribe redisChannel
消息发布: publish redisChannel "Redis is a great caching technique"
指令:
1、将信息发送到指定的频道:publish channel message
2、订阅给定的一个或多个频道的信息:subscribe channel[channel2...]
3、指退订给定的频道:unsubscribe channel[channel2...]
8、Redis事务
网友评论