/**
  * 这里是我的虚拟机相关的启动命令
  • /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
  • /usr/local/redis/bin/redis-cli -a redis
  • vi /usr/local/redis/etc/redis.conf
*/
最前面,说一下我在写java代码整合redis遇到的问题,一直提示Connection refused: connect,后来查看redis-conf文件,看到有一个protected-mode,原本是yes,改为no,重启服务就可以了。
 
 
redis安装(以下均是在centos版本上的操作)
下载好redis-x.x.tar.gz
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
make之前要安装gcc,yum install gcc
启动
src/redis-server
打开客户端
src/redis-cli
测试
redis> set foo bar
OK
redis> get foo
"bar"
指定配置文件启动(在此我把配置文件移动到了/usr/local/redis/etc/redis.conf)
命令:./redis-server /usr/local/redis/etc/redis.conf
(我本机启动命令/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf),查看服务是否启动: ps -ef | grep redis,netstat -tunpl | grep 6379
打开客户端:/usr/local/redis/bin/redis-cli
为了让其在后台运行,不占用session,将配置文件中的daemonize改为yes
--方法见官网文档(做了一点常用的方法的笔记)
string数据类型:
setnx : nx代表not exit,如果key已经存在返回0,不存在返回1。setnx name xgw
setex : 指定键值的有效时间 set name 10 123   有效时间为10秒  
.............
hashes类型:比较适合用于存储对象,相对于每个字段存储为一个String类型,将一个对象存储在hash类型中会占用更少的内存,并更方便的存储整个对象。
hset user name xgw    返回0表示失败,返回1表示成功
hget user name
.............
list类型:key为list
lpush list hello 返回list长度
lpush list world
lrange list 0 -1 展示所有的list中内容
.............
set类型:它是String类型的无序集合,set通过hash table实现
sadd myset hello  返回myset长度,添加相同元素时候返回0
smembers myset 展示set中所有内容
sorted sets
    zadd myset3 1 a
    (integer) 1
    127.0.0.1:6379> zadd myset3 2 b
    (integer) 1
    127.0.0.1:6379> zadd myset3 3 b
    (integer) 0
    127.0.0.1:6379> zrange myset3 0 -1 withscores
.............
string 最简单的数据类型
hash数据类型,可以当做表,hash table ,比string速度快
list数据类型 栈,队列
set数据类型 并集,交集,差集
zset数据类型 set的升级版,有序集合
===================================
keys my*    ,返回所有满足给定pattern的所有key
exists key  ,确认key是否存在
expire key  ,设置key的过期时间(查看key还有多少秒过期,ttl)
persist key ,移除过期时间
del key     ,删除一个key  
move key 1 (默认有0-15数据库,默认进入0数据库)
type key    ,查看key类型(string,zset(有序集合),list,...)
dbsize      ,当前数据库key大小
info        ,查看redis服务器信息
config get  ,相关配置参数
flushdb     ,清除当前数据库下的key
flushall    ,清除所有数据库中的所有key

安全性:
在redis-conf下面配置requirepass password,在用客户端连接的时候,带上参数-a password连接,否则会提示没有权限

主从复制:
  • 一个master可以有多个slave
  • 多个slave可以连接同一个master外,还可以连接到其他slave(slave之间可以连接)(心跳感应,在master宕机后,一个slave马上变成master)
  • 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
  • 提供系统的伸缩性
主从复制过程:
  1. slave与master建立连接,发送sync同步命令
  2. master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
  3. 后台完成保存后,就将此文件发送给slave
  4. slave将此文件保存到硬盘上
配置主从服务器:
配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:
slaveof 192.168.111.138 6379 #<-指定master的ip和端口
masterauth redis #<-这是主机的密码
判断主从机通过info来观察:role:slave,master_link_status:up
在此遇到问题:master_link_status:up,而我的从机上面显示down,修改redis-conf中的protected-mode为no即可
 
事务管理:
multi开启事务
exec 执行队列中的命令
discard 清空事务的命令队列并退出事务上下文=>事务回滚
乐观锁复杂事务控制
乐观锁是基于数据版本(version)的记录机制实现的。
watch命令会监视给定的key,当exec时候,如果监视的key从watch后发生过变化,
则整个事务会失败,业可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了,
watch的key是对整个连接有效的,事务也是一样。如果了解断开,监视和事务都会被自动清除。
场景(session1中watch key,然后multi,接着在session2中set key,再回到session1中
去set key,执行exec,执行失败)
(redis中,如果队列中有一条执行失败,但是执行成功的依然不会回滚,这与之前就接触的关系型数据库就很不一样)
 
 
持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常讲内存中的数据同步到硬盘来保证持久化
redis支持两种持久化方式:
  1. snapshotting(快照),也是默认方式(将数据写到二进制文件中,默认的文件名dump.rdb),可以通过配置设置自动做快照持久化的方式(配置redis在n秒内如果超过m个key被修改就自动做快照,目前redis.conf中默认配置了save 900 1 save 300 10 save 60 10000)
  2. append-only file(缩写aof)方式(将写,改等操作写到文件,redis会将每一个收到的写命令通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建真个数据库的内容,OS会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式也可能丢失部分修改,可通过配置文件告诉redis,通过fsync函数强制os写入到磁盘的时机。appendonly置为yes
  • # appendfsync always //收到命令就写入磁盘,性能最差,但是保证完全的持久化
  • appendfsync everysec
  • # appendfsync no//取决于OS,性能最好,但不能保证持久化的完整性
 
发布及订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要目的是基础消息发布者和消息订阅者之间的耦合。redis作为一个
pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅消息类型,redis将信息类型成为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息。
 
虚拟内存的使用

把暂时不经常访问的数据存内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据

NOSql之redis的学习的更多相关文章

  1. NoSQL之Redis学习笔记

    一.NoSQL与Redis 1.什么是NoSQL? NoSQL=Not Only SQL ,泛指非关系型数据库.随着互联网的兴起,传统的关系型数据库已经暴露了很多问题,NoSQL数据库的产生就是为了解 ...

  2. No-sql之redis常用命令

    转自:http://blog.csdn.net/nicewuranran/article/details/51793760 No-SQL之Redis 介绍 Redis是一种基于内存存储的key-val ...

  3. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  4. 一篇文章带你了解NoSql数据库——Redis简单入门

    一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ...

  5. 【NoSql】Redis

    [NoSql]Redis 一. 文档 1. 官网 2. Windows 安装包 3. C# Driver a. ServiceStack.Redis 最新版本是收费的 b. StackExchange ...

  6. memcache/redis 缓存学习笔记

    0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...

  7. NoSQL之Redis高级实用命令详解--安全和主从复制

    Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim ...

  8. NoSQL:redis缓存数据库

    一 Redis介绍 Redis和Memcached类似,也属于key-value nosql 数据库 Redis官网redis.io, 当前最新稳定版4.0.1 和Memcached类似,它支持存储的 ...

  9. redis入门学习记录(二)

    继第一节 redis入门学习记录(一)之后,我们来学习redis的基本使用. 接下来我们看看/usr/local/redis/bin目录下的几个文件作用是什么? redis-benchmark:red ...

随机推荐

  1. rx tx

  2. Redis学习资料汇总(荐)

    Redis学习手册系列: http://www.cnblogs.com/stephen-liu74/category/354125.html Redis详解:sorted sets数据类型及操作-IT ...

  3. SqlServer定时跑一段SQL语句

    1.请把这段SQL语句写成一个存储过程,然后需要在B上面开启 SQL Server Agent服务,如下图: 2.开启完之后,打开数据库管理工具,然后依下图所示,展开“SQL Server Agent ...

  4. C#- FTP递归下载文件

    c# ftp递归下载文件,找来找去这个最好.(打断点,一小处foreach要改成for) /// <summary> /// ftp文件上传.下载操作类 /// </summary& ...

  5. Android Developers:拖动和缩放

    这个课程描述了如何使用手势来拖拽和缩放屏幕的对象,使用onTouchEvent()方法来获取触摸事件.这里是这节课程使用的源代码. 拖动一个对象 ——————————————————————————— ...

  6. [学习笔记]--Jfinal 表单提交附件

    近期.项目里面用到了Jfinal 里面的上传附件. Jfinal 的Controller 里面提供了一个 getFile系列方法提供文件上传. 我这里呢,是文件上传和表单參数一起提交. 页面类似下图: ...

  7. chrome扩展——Postman

    今天须要測试一个http的接口,曾经都是使用java的httpClient工具jar,自己编写代码去调试,但这样的方式比較死板,每次都要执行一段代码...于是就像有没有类似的在线工具能够使用? 调查了 ...

  8. 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!

    原文:http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 前言:1.不经历风雨,怎能见彩虹.2.充分利用BaiDu.google等搜索引擎查找资料 ...

  9. Android开发--UI之Bundle的使用

    Android开发–UI之Bundle的使用 最近,把之前学过的东西大体的整理了以下,并且想把学过的心得分享给大家.我自己做了一个小小的demo,以便说明具体的应用. 这里的两个界面是通过第一个界面输 ...

  10. C++Primer笔记二

    真是一本好书,就这么点,就感觉学到很多了,当然也是我水平太差. 用shell或者bash的时候有一个文件重定向,就是每次程序运行的时候,我们都需要手动输入内容,然后程序输出内容,这时可以用文件来代替. ...