zoukankan      html  css  js  c++  java
  • linux

    linux - redis基础

    redis 源码编译安装

    1.安装redis的方式

    -yum (删除这个yum安装的redis,我们只用源码编译安装的)
    
    -rpm 
    
    -源码编译 
    

    2.删除原本的redis

    yum remove redis -y  
    

    3.下载redis源码

    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    

    4.解压缩

    tar -zxf redis-4.0.10.tar.gz
    

    5.切换redis源码目录

    cd redis-4.0.10.tar.gz
    

    6.编译源文件

    make  and make install
    
    编译好后,src/目录下有编译好的redis指令
    
    make install 安装到指定目录,
    

    7.默认在/usr/local/bin

    8.指定redis的配置文件 启动 redis

    cd /opt/redis -4.0.10/
    
    
    touch redis-6666.conf  
    
    vim redis-6666.conf  
    

    内容如下

    port 6666  		#redis端口
    
    daemonize yes   #后台运行redis  
    
    pidfile /data/6666/redis.pid	#pid号码
    
    loglevel notice	#日志等级
    
    logfile "/data/6666/redis.log"    #日志文件存放路径
    
    dir /data/6666   #redis数据目录 (需要手动创建)
    
    requirepass haohaio  #redis的密码 
    

    9.指定配置文件启动redis服务端

    redis-server redis-6666.conf  
    

    10.检查redis的进程,端口

    ps -ef |grep redis 
    
    netstat -tunlp |grep redis 
    

    11.登录redis数据库

    redis-cli -p 6666  
    
    登录后 输入密码才可访问
    
    auth  haohaio 
    

    redis 数据结构

    redis是一种高级的key:value存储系统,其中value支持五种数据类型

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

    基本命令:

    keys *         查看所有key
    type key      查看key类型
    expire key seconds    过期时间
    ttl key     查看key过期剩余时间        -2表示key已经不存在了
    persist     取消key的过期时间   -1表示key存在,没有过期时间
    
    exists key     判断key存在    存在返回1    否则0
    del keys     删除key    可以删除多个
    dbsize         计算key的数量
    

    1. strings类型

    • set   设置key

    • get 获取key

    • append 追加string

    • mset 设置多个键值对

    • mget 获取多个键值对

    • del 删除key

    • incr 递增+1

    • decr 递减-1

        127.0.0.1:6379> set name 'yu'   #设置key
        OK
        127.0.0.1:6379> get name    #获取value
        "yu"
        127.0.0.1:6379> set name 'yuchao'  #覆盖key
        OK
        127.0.0.1:6379> get name    #获取value
        "yuchao"
        127.0.0.1:6379> append name ' dsb'   #追加key的string
        (integer) 10
        127.0.0.1:6379> get name  #获取value
        "yuchao dsb"
        127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi'    #设置多个键值对
        OK
        127.0.0.1:6379> get user1    #获取value
        "alex"
        127.0.0.1:6379> get user2    #获取value
        "xiaopeiqi"
        127.0.0.1:6379> keys *      #找到所有key
        1) "user2"
        2) "name"
        3) "user1"
        
        127.0.0.1:6379> mget user1 user2 name   #获取多个value
        1) "alex"
        2) "xiaopeiqi"
        3) "yuchao dsb"
        127.0.0.1:6379> del name        #删除key
        (integer) 1
        127.0.0.1:6379> get name        #获取不存在的value,为nil
        (nil)
        127.0.0.1:6379> set num 10    #string类型实际上不仅仅包括字符串类型,还包括整型,浮点型。redis可对整个字符串或字符串一部分进行操作,而对于整型/浮点型可进行自增、自减操作。
        OK    
        127.0.0.1:6379> get num
        "10"
        127.0.0.1:6379> incr num    #给num string 加一 INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,可以用作计数器
        (integer) 11
        127.0.0.1:6379> get num  
        "11"
        
        127.0.0.1:6379> decr num      #递减1  
        (integer) 10
        127.0.0.1:6379> decr num    #递减1
        (integer) 9
        127.0.0.1:6379> get num
      

    2. list 类型

    • lpush 从列表左边插

    • rpush 从列表右边插

    • lrange 获取一定长度的元素 lrange key start stop

    • ltrim 截取一定长度列表

    • lpop 删除最左边一个元素

    • rpop 删除最右边一个元素

    • lpushx/rpushx key存在则添加值,不存在不处理

        lpush duilie 'alex' 'peiqi' 'ritian'  #新建一个duilie,从左边放入三个元素
        
        llen duilie  #查看duilie长度
        
        lrange duilie 0 -1  #查看duilie所有元素
        
        rpush duilie 'chaoge'   #从右边插入chaoge
        
        lpushx duilie2  'dsb'  #key存在则添加 dsb元素,key不存在则不作处理
        
        ltrim duilie 0 2  #截取队列的值,从索引0取到2,删除其余的元素
        
        lpop #删除左边的第一个
        rpop #删除右边的第一个
      

    3. sets集合类型

    redis的集合,是一种无序的集合,集合中的元素没有先后顺序。

    集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:

    • sadd/srem 添加/删除 元素

    • sismember 判断是否为set的一个元素

    • smembers 返回集合所有的成员

    • sdiff 返回一个集合和其他集合的差异

    • sinter 返回几个集合的交集

    • sunion 返回几个集合的并集

        sadd zoo  wupeiqi yuanhao  #添加集合,有三个元素,不加引号就当做字符串处理
        
        smembers zoo  #查看集合zoo成员
        
        srem zoo  wupeiqi #删除zoo里面的alex
        
        sismember zoo wupeiqi  #返回改是否是zoo的成员信息,不存在返回0,存在返回1
        
        sadd zoo wupeiqi   #再把wupeiqi加入zoo
        
        smembers zoo  #查看zoo成员
        
        sadd zoo2 wupeiqi mjj #添加新集合zoo2
        
        sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中没有的元素
        
        sdiff zoo2  zoo  #找出zoo2中有,而zoo没有的元素
        
        sinter zoo zoo1   #找出zoo和zoo1的交集,都有的元素
        
        sunion  zoo zoo1  #找出zoo和zoo1的并集,所有的不重复的元素
      

    有序集合

    都是以z开头的命令

    用来保存需要排序的数据,例如排行榜,成绩,工资等。

    利用有序集合的排序,排序学生的成绩

    127.0.0.1:6379> ZADD mid_test 70 "alex"
    (integer) 1
    127.0.0.1:6379> ZADD mid_test 80 "wusir"
    (integer) 1
    127.0.0.1:6379> ZADD mid_test 99 "yuyu"
    

    排行榜,zreverange 倒叙 zrange正序

    127.0.0.1:6379> ZREVRANGE mid_test 0 -1 withscores
    1) "yuyu"
    2) "99"
    3) "wusir"
    4) "80"
    5) "xiaofneg"
    6) "75"
    7) "alex"
    8) "70"
    127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
    1) "alex"
    2) "70"
    3) "xiaofneg"
    4) "75"
    5) "wusir"
    6) "80"
    7) "yuyu"
    8) "99"
    

    移除有序集合mid_test中的成员,xiaofeng给移除掉

    127.0.0.1:6379> ZREM mid_test xiaofneg
    (integer) 1
    127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
    1) "alex"
    2) "70"
    3) "wusir"
    4) "80"
    5) "yuyu"
    6) "99"
    

    返回有序集合mid_test的基数

    127.0.0.1:6379> ZCARD mid_test
    (integer) 3
    返回成员的score值
    
    127.0.0.1:6379> ZSCORE mid_test alex
    "70"
    

    zrank返回有序集合中,成员的排名。默认按score,从小到大排序。

    127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
    1) "alex"
    2) "70"
    3) "wusir"
    4) "80"
    5) "yuyu"
    6) "99"
    127.0.0.1:6379>
    127.0.0.1:6379>
    127.0.0.1:6379> ZRANK mid_test wusir
    (integer) 1
    127.0.0.1:6379> ZRANK mid_test yuyu
    (integer) 2
    

    5. 哈希数据结构

    哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必须 k1,取出k2

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

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

    • hset 设置散列值

    • hget 获取散列值

    • hmset 设置多对散列值

    • hmget 获取多对散列值

    • hsetnx 如果散列已经存在,则不设置(防止覆盖key)

    • hkeys 返回所有keys

    • hvals 返回所有values

    • hlen 返回散列包含域(field)的数量

    • hdel 删除散列指定的域(field)

    • hexists 判断是否存在

        redis hash是一个string类型的field和value的映射表
        
        语法  hset key field value  
        
        hset news:1   title "first news title" #设置第一条新闻 news的id为1,添加数据title的值是"first news title"
        
        hset news:1 content "news content"    #添加一个conntent内容
        
        hget news:1 title   #获取news:1的标题
        
        hget news:1  content  #获取news的内容
        
        hmget news:1  title content   #获取多对news:1的 值
        
        hmset news:2 title "second news title" content "second Contents2"   #设置第二条新闻news:2 多个field
        
        hmget news:2 title  content #获取news:2的多个值
        
        hkeys news:1   #获取新闻news:1的所有key
        
        hvals news:1   #获取新闻news:1的所有值
        
        hlen news:1    #获取新闻news:1的长度
        
        hdel news:1 title   #删除新闻news:1的title
        
        hlen news:1     #看下新闻news:1的长度
        
        hexists news:1 title    #判断新闻1中是否有title,不存在返回0,存在返回1
      

    centos下redis安全相关

    我们在使用redis时候,最好更改默认端口,并且使用redis密码登录。

    (1)redis没有用户概念,redis只有密码
    (2)redis默认在工作在保护模式下。不允许远程任何用户登录的(protected-mode)

    redis.conf设置

    protected-mode yes   #打开保护模式
    port 6380  #更改默认启动端口
    requirepass xxxxxx   #设置redis启动密码,xxxx是自定义的密码
    

    启动redis服务端

    redis-server /opt/redis-4.0.10/redis.conf &     #指定配置文件启动redis,且后台启动
    

    使用密码登录redis,使用6380端口

    方法1,使用这个

    [root@oldboy_python ~ 09:48:41]#redis-cli -p 6380
    127.0.0.1:6380> auth xxxx
    OK
    

    方法2,此方案不安全,容易暴露密码

    [root@oldboy_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx
    Warning: Using a password with '-a' option on the command line interface may not be safe.
    127.0.0.1:6380> ping
    PONG
    

    补充

    检查redis是否设置了密码

    127.0.0.1:6380> CONFIG get requirepass
    1) "requirepass"
    2) "xxxxxx"
    

    如果没有,也可以给redis设置密码(命令方式)

    CONFIG set requirepass "xxxxxx"
  • 相关阅读:
    关于FileUpload控件的二种用法,你都懂吗?
    Application全局对象 实现统计当前在线人数和总访问次数
    使用COOKIE对像实现保存用户基本信息(结合Session),ASP.Net实现用户登录全过程
    递规篇历路径之 使用正则过滤( 将符合正则的名称用另种正则格式替换掉 )某个路径下的所有文件或文件夹的完整路径
    小偷程序之网页分块筛选
    c#中的socket编程基础
    ASP.Net中的一些基础家常事
    PHP数组
    Effective C++总结
    构造函数、析构函数、虚函数可否内联,有何意义
  • 原文地址:https://www.cnblogs.com/konghui/p/10533743.html
Copyright © 2011-2022 走看看