Redis-入门笔记-15min带你一览redis
1 NOSQL概述
- 什么是noSQL
- not only sql
- 非关系型数据库
- 为什么需要NoSQL
- web2.0大规模动态网站的兴起
- high performance ,高并发读写,动态页面展示与交互,比如微博点赞评论等操作,实时统计在线人数排行榜等
- huge storage,海量数据的高效存储和访问,大型网站的用户登录系统
- high scalability && high availability,高可扩展性和高可用性
- 主流NOSQL产品
- redis,mongodb,couchdb
- NoSQL的特点
- 易扩展
- 灵活数据模型
- 大数据量,高性能
- 高可用
- NoSQL数据库的四大分类
- 键值存储,redis
- 优势,快速查询
- 劣势,存储数据缺少结构化
- 列存储,hbase
- 优势,快速查询
- 劣势,功能局限
- 文档数据库,mongodb
- 优势,数据结构要求不严格
- 劣势,查询性能并非特别高,缺少统一查询的语法
- 图形数据库,infogate
- 优势,社交网络,利用图结构的相关算法
- 劣势,需要对整个图做算法分析,不利于分布式方案

2 redis概述
- 字符串类型
- 列表类型
- 有序集合类型
- 散列
- 集合类型
- 缓存
- 网站访问统计
- 任务队列
- 数据过期处理
- 应用排行榜
- 分布式集群架构中的session分离
3 redis安装和使用
3.1 redis安装
- 依赖环境
- gcc-c++
1 环境准备
#官网下载 redis 3.2.5版本
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
#安装 C 编译环境
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc gcc-c++
2 安装
解压安装包后,进入文件目录编译,编译结束时,会提示 Hint: It's a good idea to run 'make test' ,建议在安装前先测试预安装下,make test预安装后,遇到错误:You need tcl 8.5 or newer in order to run the Redis test ,缺失安装包tcl,所以需要先安装这个 安装包后再次运行 make test,正常后再进行redis安装。
详细步骤如下:
#解压二进制包
tar -zvxf /opt/redis-3.2.
#进入到文件目录
cd redis-3.2.
#编译
make
#测试安装(稍微耗费点时间)
make test
#可能会提醒需要安装最新版的tcl
#yum install tcl
#指定路径安装
make PREFIX=/usr/local/redis install
- redis-benchmark
- 性能测试工具
- redis-check-aof
- aof文件修复工具
- redis-check-rdb
- rdb文件检查工具
- redis-cli
- redis客户端
- redis-server
- redis服务器启动命令
- redis-sentinel
3.2 配置文件修改
#拷贝conf文件到/etc目录
cp /opt/redis/redis-4.0./redis.conf /etc/redis.conf
#redis.conf 参数说明
################################## NETWORK #####################################
#绑定的主机地址
bind 127.0.0.1
#保护模式,是否允许 没有认证配置的主机或接口连接redis,默认是启动保护模式,则不允许这种情况
protected-mode yes
#指定redis的监听端口,默认端口是6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字,嗯,你开发的,你说了算。
port
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog
#客户端链接多长时间后关闭链接,单位是秒,指定为0,则表示关闭该功能
timeout
# A reasonable value for this option is seconds, which is the new
# Redis default starting with Redis 3.2..
tcp-keepalive
################################# GENERAL #####################################
#Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize yes
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY= to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised no
3.3 服务启动与关闭
#服务端启动
[root@bogon redis-4.0.]# cd /usr/local/redis/
[root@bogon redis]# ./bin/redis-server /etc/redis.conf
:C Aug ::30.774 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Aug ::30.774 # Redis version=4.0., bits=, commit=, modified=, pid=, just started
:C Aug ::30.774 # Configuration loaded
[root@bogon redis]# ps axu | grep redis
root 0.6 0.2 ? Ssl : : ./bin/redis-server 127.0.0.1:
root 0.0 0.0 pts/ S+ : : grep --color=auto redis
#客户端启动
redis-cli [-h 127.0.0.1] [-p ]
127.0.0.1:> ping
PONG
#存储键值对
127.0.0.1:> set name imooc
OK
#获取name对应的value
127.0.0.1:> get name
"imooc"
#获取所有keys
127.0.0.1:> keys *
) "name"
#删除keys
127.0.0.1:> del name
(integer)
127.0.0.1:> get name
(nil)
#关闭服务端
redis-cli shutdow
4 redis-py的入门
5 redis数据类型
- 不要过长
- 最好不要超过1024个字节
- 不仅消耗内存,也影响查找效率
- 不要过短
- 比如设置为a,没有实际意义,可能会降低key的可读性
- 统一命名规范
5.1字符串 string
- 赋值
- set key value
- 取值
- get key
- 取值后赋值
- getset key value
- 数值增减
- 自增1
- 如果该key不存在,则创建该key,并赋值为0,0自增后为1,等同于增加 【key,1】键值对
- 如果该key存在,则value自增加1
- incr key
- 自减1
- 如果该key不存在,则创建该key,并赋值为0,0自减后为-1,等同于增加 【key,-1】键值对
- 如果该key存在,则value自减1
- decr key
- 自增指定值
- 如果该key不存在,则创建该key,并赋值为0,0自增numbers,等同于增加 【key,numbers】键值对
- 如果该key存在,则value自增numbers
- incrby key numbers
- 自减指定值
- 如果该key不存在,则创建该key,并赋值为0,0自减numbers,等同于增加 【key,-numbers】键值对
- 如果该key存在,则value自减numbers
- decrby key numbers
- 删除
- del key
- 扩展
- value追加string内容
- append key string
5.2 哈希 hash
- 赋值
- hset key field value
- hmset key field value [field value ... ]
- 取值
- hget key field
- hmget key field [field ...]
- hgetall key
- 增加数字
- hincrby key field number
- 删除
- hdel key field
- del key
- 自学命令
- hexists key field
- hlen key
- hkeys key
- hvals key
5.3 字符串列表 list
- arraylist使用数组方式
- 根据索引查询速度是非常快的
- 但是新增跟删除操作涉及到位移操作,则会比较慢
- linkedlist使用双向链接方式
- 每个元素都记录了前后元素的指针,删除跟新增只需要修改前后指针,数据操作较快
- 两端添加
- lpush key value [value ...]
- rpush key value [value ...]
- 查看列表
- lrange key start stop
- 指定位置push
- lset key index value
- 列表中第几个位置插入value,注意位置从0开始
- 指定value插入值
- linsert key before|after pivot value
- 在列表中,从左到右,第一个等于pivot这个值的前面或者后面,插入valuse
- 两端弹出
- lpop key
- 删除列表最左边的value
- rpop key
- 删除列表最右边的value
- rpoplpush source distination
- 从source列表右边删除一个value,并把这个value存储进入distination列表中
- 适用于消息发布过程中的备份操作
- 获取列表元素个数
- llen key
- 获取列表的长度
- 扩展命令
- lpushx key value
- 如果列表存在,则从左端插入push valuse进入列表中,否则返回0
- rpushx key value
- 如果列表存在,则从右端插入push valuse进入列表中,否则返回0
- lrem key count value
- count>0,从列表的左端开始删除 值等于 value,一共删除count个
- count<0,从列表的右端开始删除 值等于 value,一共删除count个
- count=0,删除 整个列表中所有 值等于 value
5.4 字符串集合 set
- 添加删除元素
- sadd key member [member ...]
- srem key member [member ...]
- del key
- 获取集合中的元素
- smembers key
- 差集运算
- sdiff key1 [key ...]
- 求集合key1与其他集合的差集
- sdiffstore destination key1 [key ...]
- 求集合key1与其他集合的差集,并把结果存储在destination集合中
- 交集运算
- sinter key [key...]
- 求多个集合的交集
- sinterstore destination key [key...]
- 求多个集合的交集,并把结果存储在destination集合中
- 并集运算
- sunion key [key...]
- 求多个集合的并集
- sunionstore destination key [key...]
- 求多个集合的并集,并把结果存储在destination集合中
- 扩展命令
- sismember key member
- 查看member在key中是否存在
- srandmember key [count]
- 集合key中随机放回 count 个元素
- scard key
- 查看集合个数
5.5 有序字符串集合 sorted set
- 获得元素
- zscore key member
- 获取有序集合中的某个元素的score值
- zrange key start stop [withscores]
- zrangebyscore key mim max [withscores] [limit offset count]
- 添加元素
- zadd key score member [score member ...]
- 删除元素
- zrem key member [member...]
- zremrangebyscore key min max
- 扩展查询
- zincrby key increment member
- zscore key member
- zcount key min max
6 keys的通用操作
- keys *
- 查看所有keys
- del key [key...]
- 删除多个key
- exists key
- 判断某个key是否存在,存在返回1,不存在返回0
- rename key newkey
- 重命名某个key
- expire key seconds
- 设置某个key的生命期,过了这个时间就是过期数据
- ttl key
- 查看该key的生命还剩下多少秒
- type key
- 查看key的类型
7 redis的特性
7.1 多数据库
redis最多支持16个数据,下标0-15表示第几个数据库。默认是在0号数据。切换数据库可以通过select dbnumber 来切换,也可以通过move 来移动key从当前数据到指定的数据库。
7.2 事务

8 redis的持久化
- RDB持久化
- 默认支持,在指定的时间内,把内存的数据写入磁盘
- AOF持久化
- 以日志的形式记录每一个操作,启动的时候,重新执行所有log
- 无持久化
- 不进行持久化,则认为redis的作用为缓存,无需持久化数据
- RDB与AOF同时使用
8.1 RDB持久化
- 优势
- redis数据库仅包含一个文件,对于文件备份是非常方便的,如果系统出现灾难时,较容易恢复
- 灾难恢复时,备份文件较为容易单独转移到其他存储介质
- 数据量很大的时候,启动速度快
- 劣势
- 不能够保证数据无丢失,数据丢失时间 = 当前时间-最近备份时间
- 子进程完成持久化工作,如果数据集很大的时候,可能会造成短时间内redis所在服务器停止对外服务
- 配置
- RDB默认配置文件中就有,可以查看redis.conf文件中关于save的设置
- save 900 1 :900秒内至少有1个数据变化,则进行持久化
- RDB默认配置文件中就有,可以查看redis.conf文件中关于save的设置
- save 300 10 :300秒内至少有10个数据发生变化,则进行持久化
- save 60 10000 : 60秒内至少有1w个数据发生变化,则进行持久化
- dbfilename 则是命名当前持久文件的名字
- dir,则是定义当前持久化文件的存放路径
8.2 AOF持久化
- 优势
- 更高的数据安全性
- 每秒同步,最高丢失1s数据
- 每操作数同步,每次发生数据的变化都会立即记录到磁盘中,性能最低
- append追加文件备份
- 备份过程中出现问题,不会破坏之前的日志备份
- 如果写入了一半数据,然后出现系奔溃的问题,在redis下一次启动之前,可以通过redis_check_aof工具解决数据一致性问题
- 如果日志备份过大
- redis会自动启动日志重写机制,append过程中,会把备份数据写入到老的备份文件中,并且会用一个新文件,记录此期间的修改数据语句
- AOF包含一个格式清晰的数据修改操作语句的日志文件
- 劣势
- 相同数量的数据集文件,比RDB的要打
- AOF效率低于RDB
- 需要人员配置,非默认配置
- 配置
- 在redis.conf文件中,配置一下内容
- appendonly yes:启动appendonly,开启AOF备份
- appendfilename "appendonly.aof" :AOF备份的文件名
- appendfsync always :每个修改操作同步备份一次
- appendfsync everysec:1s同步备份一次
- appendfsync no :不同步
- 测试配置
- 简单测试案例
- redis中配置AOF,选择每操作一次就备份的机制,增删改数据后,执行flushall,然后通过备份文件来恢复数据到flushall之前
- 步骤
- 启动AOF,选择每操作一次就备份
- appendonly yes
- appendfsync always
- 重启redis
- /usr/local/redis/bin/redis-cli shutdown
- /usr/local/redis/bin/redis-server /etc/redis.conf
- 造数据
- 执行flushall
- 处理备份文件
- vim /usr/local/redis/appendonly.aof
- 删除flushall的操作记录
- 重启数据库
- /usr/local/redis/bin/redis-cli shutdown
- /usr/local/redis/bin/redis-server /etc/redis.conf
- 检查数据
Redis-入门笔记-15min带你一览redis的更多相关文章
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- redis入门笔记
redis入门笔记 参考redis实战手册 1. Redis在windows下安装 下载地址:https://github.com/MSOpenTech/redis/tags 安装Redis 1.1. ...
- Redis入门和Java利用jedis操作redis
Redis入门和Java利用jedis操作redis Redis介绍 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - val ...
- Redis入门笔记(二)-配置及运行
转自: http://gly199.iteye.com/blog/1056424 1.redis基本参数 redis的配置文件中的常见参数如下: daemonize 是否以后台进程运行,默认为no ...
- redis 入门笔记(一)
redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的web应用程序的完美解决方案 三个主要特点: 1,Redis数据库完全在内存中,使用磁盘仅用于持久性 ...
- NoSQL之Redis入门笔记
Redis 1.Redis介绍 1.1 NoSQL:一类新出现的数据库(not only sql),它的特点 不支持sql语法 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据 ...
- Redis入门(四)-Java操作Redis
<Redis入门>系列文章的第四篇,这一节看一下如何用Java版本的redis客户端工具--Jedis来操作redis. Jedis封装了丰富的api来对redis的五种数据类型 stri ...
- Redis学习笔记(一) 初识 Redis
简介 我所在的公司是一个以线下业务为主的公司,软件这一块的东西可以说是手工作坊,技术上的东西全靠大家自己折腾.最近也是觉得自己在社会主义的怀抱里安逸了太久,要提高思想政治觉悟,不能忘了资本主义的黑暗, ...
随机推荐
- laravel怎么创建一个简单的blog
主要功能实现:点击标题跳转 第一步:创建路由: Route::get('/articles','ArticlesController@index'); Route::get('/articles/{i ...
- alibaba druid 在springboot start autoconfig 下的bug
alibaba druid 在springboot start autoconfig下的bug 标签(空格分隔):druid springboot start autoconfig 背景 发现.分析过 ...
- vue和mvvm的一些小区别
Vue.js 和 MVVM 小细节 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这 ...
- xhr.readyState的就绪状态
0:初始化,XMLHttpRequest对象还没有完成初始化 1:载入,XMLHttpRequest对象开始发送请求 2:载入完成,XMLHttpRequest对象的请求发送完成 3:解析,XMLHt ...
- Jenkins构建Android项目持续集成之单元测试及代码覆盖率
单元测试 在软件开发中一直在推崇TDD(测试驱动开发),但是一直不能被有效的执行或者并不是真正的测试驱动开发(先开发后写单元测试),因为我们懒!而Android开发又是大多应用层面的开发,很多都是和视 ...
- Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序
Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 & ...
- JS内置对象学习总结
日期对象: 创建日期对象: var date=new Date();//创建日期对象 设置/返回年份方法: date.getFullYear(); date.setFullYear(); 返回星期的方 ...
- 使用软件开发的部分思想,帮助HR处理Excel。
前言 上周末,XX给我抱怨:因为计算绩效奖金,把2个人的工资发错了,还被扣了500元.问的缘由得知,她每个月要处理十来个excel表格,每次都要手动修改里面的值,如果修改了一处,其他地方也要修改,然后 ...
- ZooKeeper快速学习
"一入Java深似海",过去自身对于分布式的接触,始终处于使用别人构建的框架的水平,最多就是在nginx配置一下第4层的负载均衡(最后有介绍).随着java使用深入,本文将重点理解 ...
- 发博客用的一些HTML
这个世界,在发生什么? 移动光标 <p style="background: #999999; padding: 5px; font-size: 22px;">< ...