最常用的缓存技术---redis入门
Redis简介
Redis是基于内存,也可以基于磁盘持久化nosql数据库,使用c语言开发。
数据存储结构:key-value
安装环境准备
Redis使用c语言开发,需要使用gcc编译程序进行编译。
1) 安装gcc
a) 从磁盘镜像中进行安装:(重启Linux服务器需要重新挂载磁盘镜像)
b) 使用yum命令直接从mine.repo文件中本地URL下载
c) 挂载命令:mount /dev/cdrom /mnt
d) 安装命令:yum -y install gcc
2) 安装上传文件插件
a) 工具上传文件:(只能上传root目录)
b) Alt+P上传文件默认只能上传root目录
c) 安装插件:(可以把文件上传任意目录)
- Rz(lrzsz)
- 安装命令:yum –y install lrzsz (磁盘镜像中直接安装)
安装redis
上传安装包
使用rz命令上传redis安装包,到/usr/local/hadoop目录下:
[root@localhost hadoop]# ll
total 144964
drwxr-xr-x. 9 root root 4096 Jul 13 01:37 apache-tomcat-7.0.61
-rw-r--r--. 1 root root 8816567 May 5 2015 apache-tomcat-7.0.61.tar.gz
drwxr-xr-x. 8 uucp 143 4096 Oct 8 2013 jdk1.7.0_45
-rw-r--r--. 1 root root 138094686 Jul 13 01:28 jdk-7u45-linux-x64.tar.gz
-rw-r--r--. 1 root root 1358081 May 14 2015 redis-3.0.0.tar.gz
解压
解压命令:tar -zxvf redis-3.0.0.tar.gz
安装redis
1) 编译
a) 命令:make
b) 进入redis解压目录:执行编译命令。
c) 执行编译程序:生成编译文件在src目录下
2) 安装
a) 命令:make install PREFIX=/usr/local/hadoop/redis
b) 进入redis解压目录:执行安装命令
[root@localhost redis-3.0.0]# make install PREFIX=/usr/local/hadoop/redis
cd src && make install
make[1]: Entering directory `/usr/local/hadoop/redis-3.0.0/src'
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory `/usr/local/hadoop/redis-3.0.0/src'
启动redis服务
前台启动
启动命令:./redis-server
特点:默认启动前台服务,进程一种阻塞,不能直接退出,使用客户端进行登录。

后台启动
修改redis配置文件,redis.conf配置文件,此时bin安装目录没有配置文件,需要从解压目录中拷贝一份配置文件即可。
1) 拷贝redis.conf配置文件
a) redis.conf在redis解压目录中
b) 拷贝:cp redis.conf ../redis/bin/
[root@localhost bin]# ll
total 15520
-rw-r--r--. 1 root root 18 Jul 26 17:14 dump.rdb
-rwxr-xr-x. 1 root root 4587078 Jul 26 17:09 redis-benchmark
-rwxr-xr-x. 1 root root 22185 Jul 26 17:09 redis-check-aof
-rwxr-xr-x. 1 root root 45403 Jul 26 17:09 redis-check-dump
-rwxr-xr-x. 1 root root 4689993 Jul 26 17:09 redis-cli
-rw-r--r--. 1 root root 41403 Jul 26 17:16 redis.conf
lrwxrwxrwx. 1 root root 12 Jul 26 17:09 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 6448257 Jul 26 17:09 redis-server
2) 修改redis配置文件
a) daemonize no==daemonize yes
3) 启动redis,加载配置文件
a) 命令:./redis-server redis.conf
4) 登录redis
a) 登录命令:./redis-cli –h ip –p port
b) 登录:./redis-cli (默认登录6379端口redis服务)
Redis命令
redis是一种高级的key:value存储系统,其中value支持五种数据类型:
1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)
而关于key,有几个点要提醒大家:
1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key最好使用统一的命名模式,例如user:10000:passwd。
Strings
Redis存储结构是key:value,value是 strings数据类型。
命令:
语法:set key value
1) set name zhangsanfeng
a) 给Strings类型key是name 添加一个值。
2) get name
a) 获取key是name属性的值。
3) incr age
a) 给数字字符类型自动加1
b) 把数字字符类型自动转换成integer类型,然后执行再加上1
4) decr age
a) 给数字字符类型自动减1
b) 把数字字符类型自动转换成integer类型,然后执行减去1
5) incrby age 10
a) 给指定键值加速10
6) decrby age 10
a) 给指定键值减去10
Hash
Hash是集合类型,适合于用来存储对象。Java集合类型是用来存储对象。
存储数据结构分析:
第一种数据结构:

存取对象,使用一个key,使用一个key获取一个对象,必须使用反序列化。
缺点:
占用IO资源。
第二种数据结构:

缺点:
用户ID被多次使用,数据冗余。资源浪费。
第三种数据结构:

Redis存储结构:key是用户ID value:就是hash类型数据。
命令:
1) hset user username zhaowuji
a) 给user中Username属性设置一个值
2) hget user username
a) 获取User中Username属性的值
3) hdel user password …..
a) 删除User中属性
4) hsetnx user email 123@qq.com
a) 如果user中email属性值已经存在,不会覆盖
b) 如果不存在,设置值。
5) hmset user password 123 age 11
a) 同时设置多个值
6) Hmget user username age password
Lists
List集合数据结构:类似数组,数据是顺序存储。
List集合链表结构:通过指针从头指针查询到尾指针查找元素。
命令:
1) lpush mylist a b c d
a) 给list类型数据结构设置多个值
2) lrange mylist 0 -1
a) 获取mylist集合中所有值
b) 0:值链表开始位置
c) -1:链表的结束位置
3) lpop mylist
a) 出栈集合mylist:出栈链表头指针元素。
4) lrem mylist 3 a
a) 删除链表mylist中前3个等于a的值。
5) lset mylist 2 s
a) 给链表mylist集合中2角标位置设置一个值,覆盖原值。
6) linsert mylist after s b
a) 在集合链表mylsit中s元素后面插入一个b
Set
命令:
1) sadd myset a b c
a) 给set集合myset设置值:a b c
b) Set集合元素值不允许重复
2) smembers myset
a) 获取集合myset中值
3) srem myset a b
a) 删除集合myset中元素
4) smove myset myset1 c
a) 把集合myset中的元素c移动到集合myset1中
Sorted set
Set集合:有序集合。
给set集合中每一元素都设置一个得分,根据得分排序。
Set集合元素不允许重复,得分可以重复。
设置得分语法:ZADD key score member [score] [member]
命令:
1) zadd mysset 1 one 2 two 12 three 9 four 10 five
a) 给集合mysset集合添加5个元素,每一个元素都设置一个得分。
2) zcount mysset 1 10
a) 获取分数1到10的元素个数,默认是闭区间。
3) zcount mysset (1 10
a) 获取分数1到10的元素个数,左边是开区间(不包含1元素)
4) zcount mysset -inf +inf
a) 获取所有元素
b) –inf:最低值
c) +inf:最高值
5) zrange mysset 0 -1 withscores
a) 获取集合mysset中所有元素
b) 0:头部元素
c) -1表示尾部元素
d) Withscores:查询元素时候,把分数查询出来
6) zrangebyscore mysset 1 10 withscores limit 2 2
a) 根据分数大小来获取元素:
b) Limit分页获取值。
多数据库实例
Redis支持16个数据库实例,数据库实例角标从0—15,使用redis客户端登录redis服务器,默认登录0号数据库。
登录其他数据库实例:
登录语法:select 数据库实例ID(角标)
登录1号数据库:
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
需求:把0号数据库数据移动1号数据库
命令:move user 1 //移动user到1号数据库
事务
事务命令:
开启事务:multi
提交事务:exec
回滚事务:discard
监听事务:watch(乐观锁)
用户A,用户B 同时读取商品数量itemNum=1,用户A,用户B都需要购买商品,商品数量需要减去1,使用乐观锁解决问题:
事务一致性
设计:商品数量添加,在添加过程中出一个错误,查看程序执行一致性。
127.0.0.1:6379> multi//开启事务
OK
127.0.0.1:6379> incr itemNum
QUEUED
127.0.0.1:6379> incr itemNum
QUEUED
127.0.0.1:6379> incrby itemNum 10
QUEUED
127.0.0.1:6379> lpop itemNum//使用操作list数据结构命令操作String类型,出现错误
QUEUED
127.0.0.1:6379> decr itemNum
QUEUED
127.0.0.1:6379> decrby itemNum 10
QUEUED
127.0.0.1:6379> exec//提交事务
1) (integer) 2
2) (integer) 3
3) (integer) 13
4) (error) WRONGTYPE Operation against a key holding the wrong kind of value
5) (integer) 12
6) (integer) 2
特点:redis事务不遵循ACID大一统理论,即使中间执行出现错误,后面不影响执行。
12.2 事务回滚
127.0.0.1:6379> mult//开启事务
OK
127.0.0.1:6379> incr itemNum
QUEUED
127.0.0.1:6379> incr itemNum
QUEUED
127.0.0.1:6379> discard//事务回滚
OK
127.0.0.1:6379> get itemNum
"2"
12.3 Watch
Watch监听事务:乐观锁
乐观锁:一旦发现被监听事务变量发生了变化,事务回滚。
127.0.0.1:6379> watch itemNum
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decr itemNum //当检测到itemNum发生变化时,此命令不执行。
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get itemNum
"0"
Redis持久化
Rdb(redis系统默认持久化策略)
Rdb持久化优点
1) 持久化文件将只包含一个文件
2) 对灾难恢复,主从复制 效率比较高。
3) 持久化工作:子进程
Rdb缺点
1) 数据安全性不是很好
Rdb数据持久化同步策略
缺省情况下,Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
Aof
Aof持久化优点
1) 根据redis aof同步策略,数据有更高安全性
Aof缺点
1) 性能比rdb低
最常用的缓存技术---redis入门的更多相关文章
- 分布式缓存技术redis学习系列
分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- 分布式缓存技术redis学习(三)——redis高级应用(主从、事务与锁、持久化)
上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性.目录如下: 安全性设置 设置客户端操作秘密 客户 ...
- 分布式缓存技术redis学习(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- 分布式缓存技术redis系列(五)——redis实战(redis与spring整合,分布式锁实现)
本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...
- 分布式缓存技术redis系列(三)——redis高级应用(主从、事务与锁、持久化)
上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...
- 分布式缓存技术redis系列(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
随机推荐
- 【笔记】归纳js getcomputedStyle, currentStyle 以及其相关用法
好吧,鉴于前端则个行业知识宽度广而深,早期看过高程介绍过的获取元素计算后的最终样式(浏览器显示的最终样式)的方法现在也忘得七七八八了 于是百度了一下,看了一下大神张鑫旭的博客,这里写个随笔记录一下 ...
- Alamofire源码解读系列(十一)之多表单(MultipartFormData)
本篇讲解跟上传数据相关的多表单 前言 我相信应该有不少的开发者不明白多表单是怎么一回事,然而事实上,多表单确实很简单.试想一下,如果有多个不同类型的文件(png/txt/mp3/pdf等等)需要上传给 ...
- IOS开发创建开发证书及发布App应用(三)——创建App ID
3.创建App ID 继续上一篇所讲,今天写的这个是创建App ID 依然在个人中心创建证书这里, 如果不知道的,可以查看以前写的 点击左边的 Identifiers 下面的App IDs,如下图 ...
- 【CreateJS】WebStorm+Adobe Animate CC 搭配开发HTML5,入门教程
目的:动画设计师用Adobe Animate CC做好动画素材,发布好之后,交给程序员写交互代码:在WebStorm之类的ide里操纵 Animate 里面的变量,class等. 前提环境: ①安装好 ...
- Shell括号之间的区别
前言 初次学习Shell,对于括号的使用肯定很困惑,所以我打算将其整理成一篇文章 单括号 { } 表达变量的值,在不引起歧义的时候可以省略大括号 例子: var=1 echo ${var} # 或者e ...
- 老李分享:robotium3.6与4.0 later 的区别 1
老李分享:robotium3.6与4.0 later 的区别 因为下载的直接是最新版本的robotium4.1版,这次碰到gridView问题时,发现网上有getCurrentListViews( ...
- $_GET
POST GET ,是提交表单的两种方式,GET传值就用$_GET获取,POST提交表单就用$_POSTpost与get的区别是一个在地址栏显示参数,另一个不显示 如果地址是这样:http://zhi ...
- 2017华为机试题--Floyd算法
小K是X区域的销售经理,他平常常驻"5"城市,并且经常要到"1"."2"."3"."4"." ...
- Twitter数据非API采集方法
说明:这里分三个系列介绍Twitter数据的非API抓取方法. 在一个老外的博看上看到的,想详细了解的可以自己去看原文. 这种方法可以采集基于关键字在twitter上搜索的结果推文,已经实现自动翻页功 ...
- oracle表空间扩容
oracle在使用中会发现,表空间不足的情况:以下介绍了如何1.查询表空间使用率.剩余量:2.如何扩展表空间容量: 1.表空间容量指标查询 SELECT TABLESPACE_NAME "表 ...