Redis(2015.08.03笔记一)
一、redis简介
Redis是一种面向"键/值"对数据类型的内存数据库,可以满足我们对海量数据的读写需求。
redis的键只能是字符串
redis的值支持多种数据类型:
1:字符串 string
2:哈希 hash
3:字符串列表 list
4:字符串集合 set 不重复(只用于string),无序
5:有序集合sorted set ,不重复,有序
6:HyperLogLog 结构(redis2.8.9版本才有,用来做基数统计的算法。)
特点:
高性能(Redis读的速度是11W次/s,写的速度是8.1W次/s)
原子性(保证数据的准确性,原子操作,)
持久存储(两种方式RDB/快照,AOF/日志)
主从结构(master-slave,负载均衡,高可用)
集群(3.0版本)
应用:应用在高并发和实时请求的场景。
新浪微博
hash:关注列表,粉丝列表
string:微博数,粉丝数(避免使用select count(*) from...)
sorted set:TopN,热门微博
redis使用的是c语言实验的
二、环境搭建
首先安装c的编译环境
yum -y install cpp
yum -y install binutils
yum -y install glibc
yum -y install glibc-kernheaders
yum -y install glibc-common
yum -y install glibc-devel
yum -y install gcc
yum -y install make
如果上面的软件都安装之后再执行make命令还报错,就需要在make命令后面加个选项了
make MALLOC=libc
http://www.phperz.com/article/14/1219/42002.html
redis安装部署(单机)
redis官网:http://redis.io/(中文www.redis.cn)
解压:tar -zxvf redis-2.8.19.tar.gz
编译、安装
make
make install(将redis-3.0.0/src目录下面的可执行文件拷贝到/usr/local/bin目录下面,作用是在其他目录下执行脚本不需要指定绝对路径或者需要切换到路径才能执行脚本,相当于添加环境变量(将src配置到PATH))
加压缩后,执行make命令编译redis
make install
拷贝配置文件
cp redis/redis.conf /etc/
修改配置文件redis.conf
daemonize yes(后台运行)
logfile /usr/local/redis/log(后台启动的日志文件存放路径)
启动
redis-server /etc/redis.conf [--port 6379]
redis客户端(client,连接到本地的数据库)
redis-cli [-h 127.0.0.1] [-p 6379]
-h(连接的是哪一个数据库)-p(是端口号)
关闭
redis-cli shutdown
其他路径都可以调用bin目录下的shell脚本,
目录下面
(启动)redis-server
daemonize yes(后台运行)
logfile /usr/local/redis/log(日志文件)
查进程ps –ef|grep redis
停止
停止后需要重新启动才能进入
三、redis的特性【多数据库】
多数据库
每个数据库对外都是以一个从0开始的递增数字命名,不支持自定义的
redis默认支持16个数据库,可以通过修改databases参数来修改这个默认值
redis默认选择的是0号数据库
SELECT 数字: 可以切换数据库
多个数据库之间并不是完全隔离的,flushall
0-15,修改配置文件(修改数值)
数据库之间是相互隔离的
清空所有的数据库(停掉这个命令)
四、redis基础命令
获得符合规则的键名称
keys 表达式(?,* ,[],\?)
判断一个键是否存在
exists key
删除键
del key
del key1 key2
批量删除
redis-cli del `redis-cli keys "key*"`
获得键值的数据类型type
返回值可能是这五种类型(string,hash,list,set,zset)
注意:redis不区分命令大小写
keys *(查询所有的键,*是通配符)
keys crxy*
key crxy?
\?(转义字符查询问号)
查询键是否存在exists crxy
删除键
(integer(整数),返回值是2,说明成功删除2个)
在外面执行key *操作
在外面批量删除满足某些条件的键,反引号执行命令并获取返回值,相当于先执行redis-cli,进入后再执行删除
将命令传给脚本执行
获取键的类型
redis的help命令
"help @<group>" to get a list of commands in <group>
"help <command>" for help on <command>
"help <tab>" to get a list of possible help topics
"quit" to exit
列出的命令都是可以操作string类型的
按tab补全命令(小技巧)
五、redis数据类型之string
字符串类型是redis中最基本的数据类型,它能存储任何形式的内容,包含二进制数据,甚至是一张图片(二进制内容)。一个字符串类型的值存储的最大容量是1GB
命令
set/get(setnx)
mset/mget
incr/decr/incrby/decrby/incrbyfloat
append(string键,假如储存的是2.1,可以认为这是个字符串,它可以转换为integer或者float类型)
strlen(查看值的长度)
可到官网查看
命令
set/get(setnx)
mset/mget(设置多个键值/查看多个键值)
setnx会判断是否处在(set直接赋值,不会判断值是否存在)
incr(每次递增加1,前提是值是数字类型,若不是则会报错)
递减删除1(decr)
每次递增加几incrby
可以是小数和负数
拼接append,获取字符串长度(strlen)
6表示字符串的长度
六、redis数据类型之hash
hash类型的值存储了字段和字段值的映射,字段值只能是字符串,不支持其他数据类型。hash类型的键至多可以存储2^32-1个字段。
hash类型适合存储对象:如图:1-1和1-2
redis可以为任何键增减字段而不影响其他键
命令
hset/hget/hmset/hmget/hgetall(hsetnx)
hexists,判断键中的属性是否存在
hincrby(hash类型没有hincr命令)
hdel
hkeys/hvals
hlen(获取键中包含多少个字段)
key=value
(键=值)
hset(储存)user:100(这是个有意义键名,用户:用户ID,方便以后查找),hget(查询)
hmset(同时设置多个属性),hmget(同时查询多个属性)Gender0、1性别是男或女
hsetnx(如果有就创建,否则不创建)
递增操作
hincrby
(hdel)删除某个字段
hget(查询键值)
exists user:100(通用查询键是否存在)
七、redis数据类型之list
list是一个有序的字符串列表,列表内部实现是使用双向链表(linked list)实现的。
list还可以作为队列使用(后面讲)
一个列表类型的键最多能容纳2^32-1个元素。
命令
lpush/rpush/lpop/rpop
llen/lrange(-1表示最后一个元素的位置,-2倒数第二个元素)
lrem(lrem key count value)count分为三种情况
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
lindex(查询指定角标数据)
lset(修改指定角标的元素)
ltrim(截取)
linsert before|after(向指定元素前后插入元素)
rpoplpush:将元素从一个列表转到另一个列表
Lpush是左侧插入,rpush是从列表右侧插入数据
lpop(从列表左侧弹出元素,弹出后就是删除列表中的元素),rpop(从列表右侧弹出元素)
负数就是获取最后一个元素的角标(当无法获知list里面有多少个元素时,-1当成最后一个元素的角标)
llen list是获取列表元素的长度
lrem list 2 a(正数,从列表的左侧开始查找,将正数个元素删掉,负数就是从右侧查找,删除绝对值个元素)
lrem list -1 a右侧
lrem list 0 a(如果是0就会删除所有元素)
lset修改指定角标的值
ltrim截取
插入
八、redis数据类型之set
set集合中的元素都是不重复的,无序的,一个集合类型键可以存储至多 2^23-1(long类型的最大值)个元素
set集合类型和list列表类型的相似之处,如图:2-1所示
命令
sadd/smembers/srem/sismember
sdiff/sinter(交集)/sunion(并集)
sdiffstore/sinterstore/sunionstore
scard(获取集合长度)/spop(随机从集合中取出并删除一个元素)
srandmember key [count]
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
sadd set a(随机插入a元素到set名称的集合)smembers set(获取集合里面的所有的元素,元素是无序的)
Srem set a b(删除集合里面的某些元素)(判断集合是否存在某个元素,返回值1/0(存在/不存在))
sdiff set set1(求集合set有的元素而集合set1却没有的元素,集合顺序互换改变求值也会互换)
sinter(求交集,集合顺序不影响)
并集
sunionstore aaa set set1 (将set和set1 并集储存在aaa)
srandmember set1 2(从集合中随机返回2个元素,2是正数,返回值小于等于集合元素数量,元素值不重复)
负数取的元素可能重复
Redis(2015.08.03笔记一)的更多相关文章
- Storm(2015.08.12笔记)
2015.08.12Storm 一.Storm简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架. Storm能实现高频数据和大规模数据的实时处理. 官网资料显示s ...
- Zookepper(2015.08.16笔记)
2015.08.16zookepper Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务(如同小区里面的供水.电的系统) 它包含一个简单的原 ...
- OpenStack Weekly Rank 2015.08.03
Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 7 1 1 7 11 Sw ...
- redis 安装配置学习笔记
redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ...
- Redis集群学习笔记
Redis集群学习笔记 前言 最近有个需求,就是将一个Redis集群中数据转移到某个单机Redis上. 迁移Redis数据的话,如果是单机Redis,有两种方式: a. 执行redis-cli shu ...
- 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)
本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...
- 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)
本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...
- 【Redis】命令学习笔记——字符串(String)(23个超全字典版)
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 本篇基于redis 4.0.11版本,学习字符串( ...
- 【Redis】命令学习笔记——键(key)(20个超全字典版)
安装完redis和redis-desktop-manager后,开始学习命令啦!本篇基于redis 4.0.11版本,从对键(key)开始挖坑! 准备工作,使用db1(默认db0,由于之前练习用db0 ...
随机推荐
- setTimeout小总结
▓▓▓▓▓▓ 大致介绍 今天看了一篇文章,觉得写得不错,所以学习了一下,这篇博客是我自己的理解和总结 原文:你应该知道的 setTimeout 秘密 主要内容: 1.setTimeout原理 2.se ...
- CentOS系统通过PXE实现批量无人值守安装
通过传统的方式安装和部署计算机时,都需要人工干预的方式完成安装.如果需要部署大量的类似功能的工作站或服务器,则需要耗费大量的时间.同时传统的安装方式,每台计算机都需要光驱设备及安装光盘等介质,会额外增 ...
- 详解Google Chrome浏览器(操作篇)(一)
开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...
- 基于canvas的二维码邀请函生成插件
去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...
- 爬虫之爬取网贷之家在档P2P平台基本数据并存入数据库
python 版本 :3.5.2 Jupyter Notebook 使用库: reuqests (For human) json (用来加载JSON数据) datetime (用来记录抓取所花时间,也 ...
- mysql常用语法
创建表 create table <表名>( <字段名> 类型(长度) not null primary key auto_increment, **主键 name char ...
- pyqt的 .ui 转换为 .py 后的操作注意事项
1. 增加 import sys 2. 将 Ui_MainWindow(object) 中的 object 修改成修改成 QtGui.QMainWindow 3. 在 Ui_MainWindow 类中 ...
- 怎样的 Hash 算法能对抗硬件破解
前言 用过暴力破解工具 hashcat 的都知道,这款软件的强大之处在于它能充分利用 GPU 计算,比起 CPU 要快很多.所以在破解诸如 WiFi 握手包.数据库中的口令 Hash 值时,能大幅提高 ...
- NSIndexSet 浅析
Cocoa 中提供了两个用于维护区间集合的类型:NSIndexSet和NSMutableIndexSet . 这两个类型容易其名字一样,其区别就在于是否可以修改.这个区别和NSArray的一样,NSI ...
- InstallShield打包
使用2010部分汉化版(2010之后找不到更新的破解版本),主要用于打包桌面应用程序. 主要步骤: 1.3种主要的工程类型: Basic MSI,安装脚本不易使用. InstallScript,无法加 ...