zoukankan      html  css  js  c++  java
  • linux:redis

    查询: 链接

    redis初了解

    是一个 “开源、免费” 的高性能的 key - value 的数据库

    安装

    yum添加epel源

    yum install epel-release

    参考:链接

    EPEL是什么?

    EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.

    1、使用:

    首先需要安装一个叫” epel-release ”的软件包,这个软件包会自动配置yum的软件仓库。当然你也可以不安装这个包,自己配置软件仓库也是一样的。

    #用于RHEL5系列 

    wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    rpm -ivh epel-release-5-4.noarch.rpm

    #用于RHEL6系列

    wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
    rpm -ivh epel-release-6-5.noarch.rpm

    yum安装redis

    yum install redis

    Redis 服务端配置 

    vim  /etc/redis.conf

    修改以守护进程方式启动:

    找到redis.conf 并修改 daemonize no 为 daemonize yes

     

    开启客户端要确保服务端启动

    redis-server /etc/redis.conf

    查看版本

    redis-server -v  /etc/redis.conf

    打开终端

    redis-cli

    以上命令将打开以下终端:

    redis 127.0.0.1:6379>

    127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

    redis 127.0.0.1:6379> ping
    PONG

    以上说明我们已经成功安装了redis。

    设置redis开机自启动

    chkconfig --add redis
    
    chkconfig redis on   开启开机启动
    
    chkconfig redis off   关闭开机启动
    
    打开redis命令:service redis start
    
    关闭redis命令:service redis stop
    
    重启redis命令:service redis restart

    配置

    配置文件:/etc/redis.conf

    可以通过 CONFIG 命令查看或设置配置项

    CONFIG GET loglevel

    使用 * 号获取所有配置项 

    CONFIG GET *

    可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置 

    语法:

    CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

    redis.conf 配置项说明

    数据类型

    参考:链接

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    String(字符串)

    参考:链接

    一个 key 对应一个 value

    string 可以包含任何数据。比如jpg图片或者序列化的对象

    string 类型的值最大能存储 512MB

    以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 aaa,对应的值为 hello world!

    Hash(哈希)

    参考:链接

    Redis hash 是一个键值 (key=>value) 对集合,是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象

    #删除aaa对象 
    del aaa   

    HMSET aaa s1 "hello" s2 "world"
    
    HGET aaa s1
    
    HGET aaa s2

    这里使用了 Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value

    每个 hash 可以存储 232 -1 键值对(40多亿)

    List(列表)

    参考:链接

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

    列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

    Set(集合)

    参考:链接

    Redis 的 Set 是 string 类型的无序集合

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

    注意:以上实例中 c++添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

    集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

    这里用到了:

    sadd :添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0

    语法:

    sadd key member

    zset(sorted set:有序集合)

    参考:链接1    链接2

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是将Set中的元素增加一个权重参数score,元素按score有序排序

    zset的成员是唯一的,但分数(score)却可以重复。

    注意:这里用到了 zadd:添加元素到集合,元素在集合中存在则更新对应score

            zrangebyscore : 获取分数范围内的值

    语法:

    zadd key score member
    
    zrangebyscore  key  score1 score2

    redis命令

    Redis 命令用于在 redis 服务上执行操作,要在 redis 服务上执行命令需要一个 redis 客户端

    先开启服务,

    redis-server /etc/redis.conf

    后启动客户端:

    打开终端并输入命令 redis-cli该命令会连接本地的 redis 服务

    在远程服务上执行命令:

    语法:

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

    若出现乱码:

    redis-cli --raw

    键(key)

    Redis 键命令用于管理 redis 的键

    参考:链接

    HyperLogLog

    参考:链接

    Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

    Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

    在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

    但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素

    基数

    如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

    发布订阅

    参考:链接

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息

    Redis 客户端可以订阅任意数量的频道。

    原理:

    事务

    参考链接

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存。
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。【不具有原子性】
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。
    • 命令入队。
    • 执行事务。

  • 相关阅读:
    js数组条件筛选——map()
    (转)适用微信小程序的table表格(带隔行变色)
    nodejs学习笔记<七> 路由
    酷我音乐(在线试听)下载方法
    nodejs学习笔记<二> 使用node创建基础服务器
    JS BOM 窗口中的使用
    JS DOM
    JS 寄生 继承
    JS字面量创建方式的优缺点
    JS 构造函数
  • 原文地址:https://www.cnblogs.com/pam-sh/p/13166198.html
Copyright © 2011-2022 走看看