zoukankan      html  css  js  c++  java
  • redis基础

    redis简介

    REmote DIctionary Server(Redis) 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件

    redis安装

    yum安装

    #前提得配置好阿里云yum源,epel源
    #查看是否有redis包
    yum list redis
    #安装redis
    yum install redis -y
    #安装好,启动redis
    systemctl start redis
    
    

    ### 源码编译安装 ```linux 1.下载redis源码 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩 tar -zxf redis-4.0.10.tar.gz 3.切换redis源码目录 cd redis-4.0.10 4.编译源文件 make 5.编译好后,src/目录下有编译好的redis指令 6.make install 安装到指定目录,默认在/usr/local/bin
    
    ## redis配置
    新建一个配置文件redis-6379.conf,新建/data/6379/目录,在配置文件写入如下内容
    ```linux
    # redis-6379.conf配置如下:
    
    port 6379                     
    daemonize yes                                    
    pidfile /data/6379/redis.pid
    loglevel notice            
    logfile "/data/6379/redis.log"
    dir /data/6379                    
    protected-mode yes                
    requirepass   haohaio
    
    

    redis的一些执行文件的作用

    ./redis-benchmark  # 用于进行redis性能测试的工具
    ./redis-check-dump  # 用于修复出问题的dump.rdb文件
    ./redis-cli  # redis的客户端
    ./redis-server  # redis的服务端
    ./redis-check-aof  # 用于修复出问题的AOF文件
    ./redis-sentinel  # 用于集群管理
    
    

    redis启动

    redis-server是redis的服务端,切换到redis-server的目录,执行以下命令启动redis服务端

    ./redis-server /redis-6379.conf
    
    

    使用以下命令启动客户端

    # 执行客户端命令即可进入
    ./redis-cli
    # 或指定参数
    redis-cli  -p 6380  -a  zhuanqq
        -p  设置redis链接的端口
        -a  显示的填写密码
        --raw 使用原始格式
    
    # 测试是否连接上redis
    127.0.0.1:6379 > ping
    返回pong代表连接上了
    
    # 用set来设置key、value
    127.0.0.1:6379 > set name "tiger"
    OK
    # get获取name的值
    127.0.0.1:6379 > get name
    "tiger"
    
    

    redis数据结构

    redis是一种高级的key-value结构,其中key只能是strings,而value支持5种数据类型

    • 字符串(strings)
    • 散列(hashes)
    • 列表(lists)
    • 集合(sets)
    • 有序集合(sorted sets)

    strings

    • set   设置key
    • get 获取key
    • append 追加string
    • mset 设置多个键值对
    • mget 获取多个键值对
    • del 删除key
    • incr 递增+1
    • decr 递减-1
    127.0.0.1:6379> set name 'robin'  # 设置name的值为robin
    OK
    127.0.0.1:6379> get name  # 获取name的值
    "robin"
    127.0.0.1:6379> set name 'sophia'  # 重设name的值
    OK
    127.0.0.1:6379> get name
    "sophia"
    127.0.0.1:6379> append name ' is a girl'  # 给name追加值
    (integer) 16
    127.0.0.1:6379> get name
    "sophia is a girl"
    127.0.0.1:6379> mset user1 'robin' user2 'sophia'  # 设置多个值
    OK
    127.0.0.1:6379> get user1
    "robin"
    127.0.0.1:6379> get user2
    "sophia"
    127.0.0.1:6379> mget user1 user2  # 获取多个值
    1) "robin"
    2) "sophia"
    127.0.0.1:6379> keys *  # 获取所有key
    1) "123"
    2) "lst"
    3) "user2"
    4) "(1,2)"
    5) "name"
    6) "user1"
    7) "age"
    8) "num"
    9) "user"
    
    

    lists

    • lpush 从列表左边插入
    • rpush 从列表右边插入
    • lrange 获取一定长度的元素 lrange key start stop
    • ltrim 截取一定长度列表
    • lpop 删除最左边一个元素
    • rpop 删除最右边一个元素
    • lpushx/rpushx key存在则添加值,不存在不处理
    127.0.0.1:6379> lpush l1 'robin' 'yousa' 'mandy'
    (integer) 3
    127.0.0.1:6379> llen l1  # 查看l1的长度
    (integer) 3
    127.0.0.1:6379> lrange l1 0 -1 # 查看l1的所有元素
    1) "mandy"
    2) "yousa"
    3) "robin"
    127.0.0.1:6379> rpush l1 'hanser'
    (integer) 4
    127.0.0.1:6379> lrange l1 0 -1
    1) "mandy"
    2) "yousa"
    3) "robin"
    4) "hanser"
    127.0.0.1:6379> lpushx l2 'hh'
    (integer) 0
    127.0.0.1:6379> ltrim l1 0 2  # 切片,顾头也顾尾
    OK
    127.0.0.1:6379> lrange l1 0 -1
    1) "mandy"
    2) "yousa"
    3) "robin"
    127.0.0.1:6379> lpop l1  # 删除左边
    "mandy"
    127.0.0.1:6379> lrange l1 0 -1
    1) "yousa"
    2) "robin"
    127.0.0.1:6379> rpop l1  # 删除右边
    "robin"
    127.0.0.1:6379> lrange l1 0 -1
    1) "yousa"
    
    
    

    set

    sadd/srem 添加/删除 元素
    sismember 判断是否为set的一个元素
    smembers 返回集合所有的成员
    sdiff 返回一个集合和其他集合的差异
    sinter 返回几个集合的交集
    sunion 返回几个集合的并集

    127.0.0.1:6379> sadd girls sara sophia mandy  # 创建集合girls,添加三个元素
    (integer) 3
    127.0.0.1:6379> smembers girls  # 查看集合所有元素
    1) "sophia"
    2) "mandy"
    3) "sara"
    127.0.0.1:6379> srem girls sara  # 删除元素
    (integer) 1
    127.0.0.1:6379> smembers girls
    1) "sophia"
    2) "mandy"
    127.0.0.1:6379> sadd ups mandy hanser yousa  # 添加另一个集合
    (integer) 3
    127.0.0.1:6379> sdiff girls ups  # 返回girls有而ups没有的元素
    1) "sophia"
    127.0.0.1:6379> sdiff ups girls  # 返回ups有而girls没有的元素
    1) "yousa"
    2) "hanser"
    127.0.0.1:6379> sinter girls ups  # 返回两个集合都有(交集)的元素
    1) "mandy"
    127.0.0.1:6379> sunion girls ups  # 返回两个集合的并集(去重)
    1) "yousa"
    2) "sophia"
    3) "hanser"
    4) "mandy"
    
    
    

    hash

    hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。

    hashes存的是字符串和字符串值之间的映射,hash特别适合用于存储对象,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

    Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

    • hset 设置散列值
    • hget 获取散列值
    • hgetall获取在哈希表中指定 key 的所有字段和值
    • hmset 设置多对散列值
    • hmget 获取多对散列值
    • hsetnx 如果散列已经存在,则不设置(防止覆盖key)
    • hkeys 返回所有keys
    • hvals 返回所有values
    • hlen 返回散列包含域(field)的数量
    • hdel 删除散列指定的域(field)
    • hexists 判断是否存在
    127.0.0.1:6379> hset news title "today's news title"  # 新建一个hash news,并设置news的title
    (integer) 1
    127.0.0.1:6379> hset news content "news content"   # 设置news的content
    (integer) 1
    127.0.0.1:6379> hget news title  # 获取news的title
    "today's news title"
    127.0.0.1:6379> hget news content
    "news content"
    127.0.0.1:6379> hmget news title content  # 获取多个值
    1) "today's news title"
    2) "news content"
    127.0.0.1:6379> hmset news2 title "second news title" content "second content"
    OK
    127.0.0.1:6379> hmget news2 title content
    1) "second news title"
    2) "second content"
    127.0.0.1:6379> hkeys news  # 获取news的所有key
    1) "title"
    2) "content"
    127.0.0.1:6379> hlen news  # 获取news的长度
    (integer) 2
    127.0.0.1:6379> hdel news title  # 删除title
    (integer) 1
    127.0.0.1:6379> hlen news  
    (integer) 1
    127.0.0.1:6379> hexists news title  # 判断news的title是否存在,存在返回1,不存在返回0
    (integer) 0
    
    
  • 相关阅读:
    关于js中this的指向问题
    关于css垂直水平居中的几种方法
    个人第一个jquery插件(tips)
    css3实现虚拟三角形
    js-关于唯一ID的创建
    面试题
    new Promise()
    JSON.parse()、JSON.stringify()和eval()的作用
    vue-router路由导航
    NodeJS
  • 原文地址:https://www.cnblogs.com/zzliu/p/10655604.html
Copyright © 2011-2022 走看看