zoukankan      html  css  js  c++  java
  • 【Redis 基础内容+关键字 01】

    一、Redis(Remote DIctionary Server 远程字典服务器)

    1、完全开源,用C编写,是一个高性能的(key/value)分布式数据库,基于内存运行,长被称为:数据结构服务器

    2、redis与其他key-value缓存产品有一下三个特点

    • redis支持数据的持久层,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
    • redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
    • redis支持数据的备份,即master-slave模式的数据备份

     二、redis的安装/启动/关闭

    ---->安装

    1、redis官网下载http://redis.cn/安装包

    2、将下载后的redis-6.0.6.tar.gz上传到linux的opt目录下

    3、在opt目录下解压

    4、解压后进入redis目录:cd redis-6.0.6.

    5、在redis-6.0.6目录下执行make命令

      运行make命令时出现错误(需要安装gcc)

      yum install gcc-c++    (安装后gcc -v 如果查看版本为4.5.8,此版本太低,需要执行以下命令升级)

    • yum -y install centos-release-scl
    • yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    • scl enable devtoolset-9 bash
    • echo “source /opt/rh/devtoolset-9/enable” >> /etc/profile
    • gcc -v

    6、执行make  (如果出现jemalloc/jemalloc.h:没有那个文件或目录错误)

      执行:运行make distclean之后再make

    7、执行make install

    8、查看默认安装目录:usr/local/bin    --->包含以下文件

    redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动后执行)
    redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
    redis-check-dump:修复有问题的dump.rdb文件
    redis-cli:客户端,操作入口
    redis-sentinel:redis集群使用
    redis-server:Redis服务器启动命令

    ---->启动

     1、进入redis文件夹内

    cd /opt/redis-6.0.6

    注意:linux下修改配置文件,一般需要备份初始文件,所以我们需要备份redis.conf文件

    [root@bogon redis-6.0.6]# cp redis.conf ../Bak_redis_conf/

    2、修改备份的redis.conf文件,将里面的daemonize no 改成 yes,让服务在后台启动

    [root@bogon bak_redis_conf]# vi redis.conf 
    ################################# GENERAL 
    # By default Redis does not run as a daemon. Use 'yes' if you need it.
    # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
    daemonize yes

    3、进入到redis的默认安装目录,启动修改的redis.conf文件

    cd /usr/local/bin/
    //启动redis
    redis-server /opt/bak_redis_conf/redis.conf 

    //登录redis
    [root@bogon bin]# redis-cli -p 637

    4、连通测试

    127.0.0.1:6379> set k1 hello
    OK
    127.0.0.1:6379> get k1
    "hello"
    127.0.0.1:6379> ping
    PONG

    5、关闭

    单实例关闭:redis-cli shutdown
    
    多实例关闭,指定端口关闭:redis-cli -p 6379 shutdown

     三、redis启动后的基础知识

    1、单进程

    2、默认16个数据库,类似数组小标从零开始,默认0号库

    3、select切换数据库,select 1  -->切换到第二个库

    4、dbsize查看当前数据库的key的数量,keys * 查看所有key,keys k? 查看包含k的所有key

    5、flushdb清空当前库,flushall清空所有库

    6、默认端口6379

    四、Redis的五大数据类型

    1、String字符串

    String是redis最基本的类型,一个key对应一个value,一个redis中字符串value最多可以是512m

    String类型是二进制安全的,因此redis的String可以包含任何书库,比如jpg图片或者序列化的对象

    2、hash(哈希,类似Java里的map)

    是一个键值对几个,hash是一个String类型的field和value的映射表,hash特别适合存储对象

    类似Java里面的Map<String,Object>

    3、list(列表)

    列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素导列表的头部(z左边)或者尾部(右边),他的底层实际是个链表

    4、set(集合)

    redis的set是String类型的无序集合,它是通过hashTable实现的

    5、zset(sorted set 有序集合)

    zset(sorted set:有序集合)
    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
    不同的是每个元素都会关联一个double类型的分数。
    redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

     四、详解五大类型

    1、key 关键字 -->常用

    keys * 查看当前库的所有key

    exists key的名字,判某个key是否存在

    127.0.0.1:6379> exists k1
    (integer) 1
    127.0.0.1:6379> exists k4
    (integer) 0

    move key db 移动当前库的key到目标库

    ttl key 查看还有多毫秒过期,-1代表永不过期,-2表示已经过期

    expire key 秒钟:为给定的key设置过期时间

     type key 查看key是什么类型

     给同一个key先后赋不同的值,后赋的值会覆盖掉之前的值

     2、String类型

    单值单value

    常用的命令

    --> set/get/del/append/strlen (设置/获取/删除/增加/获取长度)

     --> incr/decr/incrby/decrby  一定要是数字才能进行相加

    --> getrange 获取指定区间范围内的值,类似between ... and的关系 (从0 到-1表示全部

    --> setrange 设置指定区间范围内的值,格式是setrange key值 具体值

     --> setex 设置key和value值并加上有效时间

    --> setnx 设置key/value时判断是否存在,存在设置不成功,不存在设置成功

    --> mset/mget/msetnx  设置/获取多个key、value

     3、List列表(有序可)

    单值多value

    -- > lpush /rpush/lrange

     -->lpop/rpop 移除list的value,lpop从左移除,rpop是从右移除

    --> llen 列表长度

    --> lindex 按照索引下标获取元素(从上到下)

    --> lrem 删除N个value

    --> ltrim key 开始index 结束index  (截取开始到结束的index内容)

     --> rpoplpush 把第一个列表最右边的value移动到第二个列表的最左边value的左侧

     --> linsert key before/after 值1 值2  在值1的前面/后面插入某个值

     --> lset key index value 按照索引替换值

    总结:

    • list是一个字符串链表,left、right都可以插入添加,
    • 如果键不存在,创建新的链表
    • 如果键已经存在,新增内容
    • 如果值全部移除,对应的键也就消失了
    • 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很低了

    4、set集合 (无序不能重复)

    单值多value

     --> sadd/smembers/sismember 添加列表/显示列表

     --> scard 获取集合里面的元素个数

     --> srem key value 删除集合内的元素

     --> srandmember key count 随机抽取集合内的值

    --> spop key 随机出栈

    --> smove key1 key2  将key1的某个值赋值给key2

     --> sdiff差集、slnter交集、sunlon并集

    5、hash (KV模式不变,但V是一个键值对)

    --> hset/hget/hmset/hmget/hgetall/hdel

     --> hlen 长度

    --> hexists key 判断key里面某个值是否存在

    --> hkeys/hvals 查看所有的key和value

    -->  hincrby/hincrbyfloat 整数/小数相加

    --> hsetnx 设置值的时候判断是否存在,存在增加失败,不存在增加成功

    6、ZSet (sorted set)

    在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2  (score1 v1 是一对value,则每两个是一个value)

     --> zadd/zrange

     --> zrangebyscore key 开始score 结束score

  • 相关阅读:
    fiddler的使用
    redis pipeline
    redis hash map
    redis队列的实现
    PHP-redis中文文档-命令
    websocket
    c++之socket,阻塞模式
    Django上传文件和修改date格式
    通过字符串导入模块
    'CSRFCheck' object has no attribute 'process_request' 报错
  • 原文地址:https://www.cnblogs.com/frankruby/p/14794862.html
Copyright © 2011-2022 走看看