• 从零入手Redis缓存


    1. Redis介绍

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010315日起,Redis的开发工作由VMware主持。从20135月开始,Redis的开发由Pivotal赞助。

     

    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)list(链表)set(集合)zset(sorted set --有序集合)hash(哈希类型)。这些数据类型都支持push/popadd/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了JavaC/C++C#PHPJavaScriptPerlObject-CPythonRubyErlang等客户端,使用很方便。 [1] 

    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

    redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

    目前,Vmware在资助着redis项目的开发和维护。

    2. Redis的安装

    解压安装文件

    解压好了后

    执行make进行编译

    编译ok、

    进入src目录



    Redis-cli 终端操作

    Redis-server 启动redis服务的文件

    Redis-benchmark压力测试文件

    Redis-check-xx 检车备份文件脚本

    创建Redis运行目录,并拷贝两个运行文件过去

    拷贝配置文件过去


     

    3. 启动Redis服务

    前端启动redis服务成功的标志

    ./redis-server

     


    这时有个问题,当前启动的是不能关的,一关就没了,所以需要进行修改

    停止服务Ctrl+z

    先停止掉redis服务

    使用后台来启动redis服务

    vim redis.conf

    改成yes保存,设置后台启动redis

    再次启动

    发现还是前端启动

    启动的时候带上配置文件一起启动

    查看下redis进程

    发现redis已经启动


    4. 简单使用

    设置了三个变量,这三个变量都存储在内存中

    如何读取?

    Get!


    5. 具体操作

    1.  Key的操作

    在redis里面,出了“ ”和空格 不能作为名字的组成内容外,其他内容都可以作为key的名字部分,名字长度不做要求

    换句话来说,就是变量名称

    代码

    作用

    Exists key

    是否存在

    Del key1 key2 ….

    删除指定的key

    Type key

    返回给定的key的value类型

    Key pattern

    返回匹配指定模式的所有的key

    Rename oldkey newkey

    改名字

    Dbsize

    返回当前数据库的key的数量

    Expire key seconds

    为key指定过期时间

    Ttl key

    返回key的过期秒数

    Select db-index

    选择数据库

    Move key db-index

    将key从当前数据库移动到指定数据库

    Flushdb

    删除当前数据库中所有的key

    Flushall

    删除所有数据库中的所有key

     

    这里举例了一个的使用


    2.  String类型的操作

    String是redis最基本的类型

    Redis的string可以包含任何数据,包括jpg图片或者序列化对象

    单个value值最大上限是1G字节

          

    代码

    作用

    Set key value

    设置key对应的值为string类型的value

    Mset key1 value1…keyN valueN

    一次设置多个key的值

    Mget key1 key2 … keyN

    一次获取多个key的值

    Incr key

    对key的值做++操作

    Decr key

    同上 –操作

    Incrby key integer

    同incr 加指定值

    Decrby key integer

    同decr 减指定值

    Append key value

    给指定key的字符串追加value

    Substr key start end

    返回截取过的key的字符串值

     


    3.  List链表类型的介绍和使用

    List类型其实是一个双向链表

    如果想要查询前10个最新的用户,

    要一个个查,太消耗资源

    List链表示例图:

    通过list链表保存登陆系统的最新5个用户信息

    新用户进来,旧的用户踢出

    链表该如何操作?

    代码

    作用

    Lpush key string

    在key对应list的头部添加字符串元素

    Rpop key

    从list的尾部删除元素,并返回删除元素

    Lien key 返回 key

    对应list的长度,key值不存在返回0,如果key对应类型不是list返回错误

    Rpush key string

    同上,在尾部添加

    Lpop key

    从list的头部删除元素,并返回删除元素

    Ltrim key start end

    截取list,保留指定区间内的元素

    4.  Set集合类型

    Redis的set是string类型的无序集合。

    Set元素最大可以包含(2的32次方-1)个元素

    每个集合中的各个元素不能重复

    代码

    作用

    Sadd key member

    添加一个string元素到key对应的set集合中,返回成功1

    Srem key member

    从key对应·set中移除给定元素,成功返回1

    Smove p1 p2 member

    从p1对应set中移除member并添加到p2对应set中

    Scard key

    返回set的元素个数

    Sismember key member

    判断member是否存在set中

    Sinter key1 key2.。。。

    返回所有给定key的交集

    Sunion key1 key2

    返回所有给定key的并集

    Sdiff key1 key2.。

    返回所有给定key的差集

    Smembers key

    返回key对应set的所有元素,结果是无序的

     

    里面有一个key五个元素

    接着又添加一个Linken

     


    5.  SortSet排序集合类型操作

    和set一样,sorted set 也是string元素的集合

    不同的是,每个元素都会关联一个权

    通过权值可以有序的获取集合中的元素

    案例:

    利用sort set实现获取最热门的前5帖子学习

    排序集合中的每个元素都是值,权的组合

    代码

    作用

    Zadd key score member

    添加元素到集合,元素在集合中存在则更新对应score

    Zrem key member

    删除指定元素,1成功,0不存在

    Zincrby key incr member

    按照incr幅度增加对应member的score值,返回score值

    Zrank key member

    返回指定元素在集合中的排名(下标),集合中元素是安score从小到大排序的

    Zrange key start end

    类似Irange操作从集合中指定区间的元素,返回的是有序结果

    Zrevrange key start end

    同上,返回是逆序的

    Zcard key

    返回集合中元素个数

    Zscore key elemet

    返回给定元素对应的score

    Zremrangebyrank key min max

    删除集合中排名在给点区间的元素


    6.  快照持久化

    900秒一个Key变化就(快照)保存

    300秒十个key变化就(快照)保存

    一分钟一万个key变化就(快照)保存

    这样控制的好处:

          数据修改的频率非常高,备份的频率也高,

           数据修改的频率低,备份的频率也低。

     

    快照持久化保存的名字



     



    手动发起快照持久化

    如果对本机:

    7.  AOF持久化

    本质:把用户执行的每个“写”指令(添加,删除,修改)都备份到文件中,还原的时候执行具体的“写“指令

    开启AOF持久化会清空redis内部数据

    开启AOF持久化

    配置文件被修改 重启服务

    查看redis进程:Ps –A | grep redis

    -9强制杀死进程

    启动一个新的进程

     

     

    Aof追加持久化的备份频率

     

    Always 每次收到写指令就立刻强制写入磁盘,很慢,但能保持完全的持久化

    Everysec 每秒强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

    No 完全依赖OS 性能最好,持久化没保证


    8.  主从模式

    为了降低每个redis服务器的负载,可以设置几个,并作主从模式

    一个服务器负载“写“

    其他服务器负载“读”

    主服务器会 自动 同步给从服务器


    修改IP地址和端口号



  • 相关阅读:
    轻松搞定Ajax(分享下自己封装ajax函数,其实Ajax使用很简单,难是难在你得到数据后来怎样去使用这些数据)
    模块化开发,SesJS简单总结
    轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)
    轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)
    javascript中可处理的浮点数的最高精度(和小数的一些小特性)
    PyLucene检索demo
    PyLucene索引DEMO
    Lucene类介绍
    PyLucene 的安装
    写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”
  • 原文地址:https://www.cnblogs.com/chengxiaolong/p/10194915.html
Copyright © 2020-2023  润新知