Redis

作者: 五十米_深蓝 | 来源:发表于2018-11-12 19:11 被阅读6次

    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事务

    相关文章

      网友评论

          本文标题:Redis

          本文链接:https://www.haomeiwen.com/subject/syrgpftx.html