一、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笔记一)的更多相关文章

  1. Storm(2015.08.12笔记)

    2015.08.12Storm   一.Storm简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架.   Storm能实现高频数据和大规模数据的实时处理. 官网资料显示s ...

  2. Zookepper(2015.08.16笔记)

    2015.08.16zookepper   Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务(如同小区里面的供水.电的系统) 它包含一个简单的原 ...

  3. OpenStack Weekly Rank 2015.08.03

    Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 7 1 1 7 11 Sw ...

  4. redis 安装配置学习笔记

    redis 安装配置学习笔记 //wget http://download.redis.io/releases/redis-2.8.17.tar.gz 下载最新版本 wget http://downl ...

  5. Redis集群学习笔记

    Redis集群学习笔记 前言 最近有个需求,就是将一个Redis集群中数据转移到某个单机Redis上. 迁移Redis数据的话,如果是单机Redis,有两种方式: a. 执行redis-cli shu ...

  6. 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)

    本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...

  7. 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)

    本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...

  8. 【Redis】命令学习笔记——字符串(String)(23个超全字典版)

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 本篇基于redis 4.0.11版本,学习字符串( ...

  9. 【Redis】命令学习笔记——键(key)(20个超全字典版)

    安装完redis和redis-desktop-manager后,开始学习命令啦!本篇基于redis 4.0.11版本,从对键(key)开始挖坑! 准备工作,使用db1(默认db0,由于之前练习用db0 ...

随机推荐

  1. Linux下JDK安装

    最近在学习linux,倒腾了半天.终于把jdk安装好了,写篇博客记录下来,关键是jdk环境变量的配置和保存了 我用的SecureCRT连接linux,然后再在SecureCRT上敲命令,关于Secur ...

  2. css3 3D变形 入门(一)

    css3 3D.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 0 ...

  3. AWS EC2笔记

    朋友想搭一个境外网站,找我帮忙,希望服务器.域名都在境外.我没有在境外建站的经历,只能先尝试.于是上网搜索了一下境外服务器,大家比较常用的是Digital Ocean和AWS,我索性打开这两家的官网, ...

  4. Android Studio 错误集

    错误列表与解决方案: 1.Android studio Gradle project sync failed Android studio 构建项目出错 Error:Unable to start t ...

  5. FPGA学习体会

    我是安徽工程大学电子信息科学与技术专业的学生刘美花,在v3学院的培训结束了,这十几天的培训对我来说还是挺有意义的,不过中间也有一些波折.还记得刚开始的时候和老师还有各个学校的学生不太熟,心中有诸多不满 ...

  6. GET和POST的区别,何时使用POST?

     GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符     POST:一般用于修改服务器上的资源,对所发送的信息没有限制.     GET方式需要使用Re ...

  7. css特殊字符编码

  8. STL中sort排序算法第三个参数_Compare的实现本质

    关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重 ...

  9. 不启动VS2013,直接打开帮助文档的方法

    在使用VS2013做开发的时候,当我们需要查询一个知识点时,直接按"F1"键就可以打开配套的帮助文档.如果在没有打开VS2013的情况想查看它的帮助文档,我们应该怎么办呢?我们能否 ...

  10. Angular.js之自定义指令学习笔记

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...