NoSQL简介

1.NoSQL:全名为Not Only SQL,指的是非关系型的数据库

随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来

2.优点与缺点分析

①优点:高可扩展性

分布式计算

低成本

架构的灵活性,半结构化数据

没有复杂的关系

②缺点:没有标准化

有限的查询功能(到目前为止)

最终一致是不直观的程序

3.分类

类型

部分代表

特点

列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

Redis安装和运行

1.打开redis官方网站,https://redis.io/,推荐下载稳定版本(stable)

2.下载

tar zxvf redis-3.2.5.tar.gz

①复制:推荐放到usr/local目录下

sudo mv -r redis-3.2.3/* /usr/local/redis/

②进入redis目录

cd /usr/local/redis/

③生成

sudo make

④测试

sudo make test

⑤安装:将redis的命令安装到/usr/bin/目录,这段运行时间会较长

sudo make install

⑥运行:启动服务器:在桌面目录

redis-server

⑦按ctrl+c停止,启动客户端:在新终端中运行如下代码

redis-cli

⑧运行命令

pingset 'a' '123'

⑨当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储

基本配置

1.在源文件/usr/local/redis目录下,文件redis.conf为配置文件

2.绑定地址:如果需要远程访问,可将此行注释

bind 127.0.0.1端口,默认为6379

3.是否以守护进程运行

①如果以守护进程运行,则不会在命令行阻塞,类似于服务

②如果以非守护进程运行,则当前终端被阻塞,无法使用

③推荐改为yes,以守护进程运行

daemonize no|yes

4.数据文件

dbfilename dump.rdb

5.数据文件存储路径

①dir的默认值为./,表示当前目录

②推荐改为:dir /var/lib/redis

6.使用配置文件方式启动

①直接运行redis-server会直接运行,阻塞当前终端

②一般配置文件都放在/etc/目录下

sudo cp /usr/local/redis/redis.conf /etc/redis/

推荐指定配置文件启动

sudo redis-server /etc/redis/redis.conf

7.停止redis服务

ps ajx|grep redissudo kill -9 redis的进程id

数据操作

1.redis是key-value的数据,所以每个数据都是一个键值对,键的类型是字符串

2.值的类型分为五种:

①字符串string

②哈希hash

③列表list

④集合set

⑤有序集合zset

4.string

①string是redis最基本的类型

②最大能存储512MB数据

③string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等

设置键值:

set key value

设置键值及过期时间,以秒为单位:

SETEX key seconds value

设置多个键值:

MSET key value [key value ...]

根据键获取值,如果不存在此键则返回nil

GET key

根据多个键获取多个值

MGET key [key ...]

运算

要求:值是数字

将key对应的value加1

INCR key

将key对应的value加整数

INCRBY key increment

将key对应的value减1

DECR key

将key对应的value减整数

DECRBY key decrement

其它

追加值

APPEND key value

获取值长度

STRLEN key

5.键的命令

查找键,参数支持正则

KEYS pattern

判断键是否存在,如果存在返回1,不存在返回0

EXISTS key [key ...]

查看键对应的value的类型

TYPE key

删除键及对应的值

DEL key [key ...]

设置过期时间,以秒为单位

创建时没有设置过期时间则一直存在,直到使用使用DEL移除

EXPIRE key seconds

查看有效时间,以秒为单位

TTL key

6.hash

hash用于存储对象,对象的格式为键值对

设置单个属性

HSET key field value

设置多个属性

HMSET key field value [field value ...]

获取一个属性的值

HGET key field

获取多个属性的值

HMGET key field [field ...]

获取所有属性和值

HGETALL key

获取所有的属性

HKEYS key

返回包含属性的个数

HLEN key

获取所有值

HVALS key

判断属性是否存在

HEXISTS key field

删除属性及值

HDEL key field [field ...]

返回值的字符串长度

HSTRLEN key field

7.list

①列表的元素类型为string

②按照插入顺序排序

③在列表的头部或者尾部添加元素

在头部插入数据

LPUSH key value [value ...]

在尾部插入数据

RPUSH key value [value ...]

在一个元素的前|后插入新元素

LINSERT key BEFORE|AFTER pivot value

④设置指定索引的元素值

⑤索引是基于0的下标

⑥索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LSET key index value

移除并且返回 key 对应的 list 的第一个元素

LPOP key

移除并返回存于 key 的 list 的最后一个元素

RPOP key

⑦返回存储在 key 的列表里指定范围内的元素

⑧start 和 end 偏移量都是基于0的下标

⑨偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LRANGE key start stop

⑩裁剪列表,改为原集合的一个子集

start 和 end 偏移量都是基于0的下标

偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LTRIM key start stop

返回存储在 key 里的list的长度

LLEN key

返回列表里索引对应的元素

LINDEX key index

8.set

①无序集合

②元素为string类型

③元素具有唯一性,不重复

添加元素

SADD key member [member ...]

返回key集合所有的元素

SMEMBERS key

返回集合元素个数

SCARD key

求多个集合的交集

SINTER key [key ...]

求某集合与其它集合的差集

SDIFF key [key ...]

求多个集合的合集

SUNION key [key ...]

判断元素是否在集合中

SISMEMBER key membe

9.zset

①sorted set,有序集合

②元素为string类型

③元素具有唯一性,不重复

④每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序

⑤元素的score可以相同

添加

ZADD key score member [score member ...]

返回指定范围内的元素

ZRANGE key start stop

返回元素个数

ZCARD key

返回有序集key中,score值在min和max之间的成员

ZCOUNT key min max

返回有序集key中,成员member的score值

ZSCORE key member

发布订阅

1.发布订阅

①发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅

②订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的

③发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑

④客户端发到频道的消息,将会被推送到所有订阅此频道的客户端

⑤客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来

2.消息的格式

推送消息的格式包含三部分

part1:消息类型,包含三种类型

①subscribe,表示订阅成功

②unsubscribe,表示取消订阅成功

③message,表示其它终端发布消息

如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量

如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令

如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容

订阅

SUBSCRIBE 频道名称 [频道名称 ...]

取消订阅

如果不写参数,表示取消所有订阅

UNSUBSCRIBE 频道名称 [频道名称 ...]

发布

PUBLISH 频道 消息

主从配置

1.主从配置

①一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构

②比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作从服务器

③设置主服务器的配置

bind 192.168.1.10

④设置从服务器的配置

⑤注意:在slaveof后面写主机ip,再写端口,而且端口必须写

bind 192.168.1.11slaveof 192.168.1.10 6379

⑥在master和slave分别执行info命令,查看输出信息

⑦在master上写数据

set hello world

⑧在slave上读数据

get hello

与python交互

sudo pip install redis

使用源码安装

unzip redis-py-master.zipcd redis-py-mastersudo python setup.py install

2.交互代码

引入模块

import redis

连接

try:

r=redis.StrictRedis(host='localhost',port=6379)

except Exception,e:

print e.message

方式一:根据数据类型的不同,调用相应的方法,完成读写

r.set('name','hello')r.get('name')

方式二:pipline

缓冲多条命令,然后一次性执行,减少服务器-客户端之间TCP数据库包,从而提高效率

pipe = r.pipeline()pipe.set('name', 'world')pipe.get('name')pipe.execute()

封装

连接redis服务器部分是一致的,这里将string类型的读写进行封装

import redis

class RedisHelper():

def __init__(self,host='localhost',port=6379):

self.__redis = redis.StrictRedis(host, port)

def get(self,key):

if self.__redis.exists(key):

return self.__redis.get(key)

else:

return ""

def set(self,key,value):

self.__redis.set(key,value

转载至链接:https://my.oschina.net/zhenfei/blog/1932996

java redis教程_Redis 使用教程 (全)相关推荐

  1. java redis 下载_redis Java源代码 redis.rar - 下载 - 搜珍网

    压缩包 : redis.rar 列表 redis/.classpath redis/.mymetadata redis/.project redis/.settings/.jsdtscope redi ...

  2. java redis 原子操作_redis快速入门

    Redis服务的启动 redis-server.exe redis.windows.conf 连接Redis服务器 redis-cli.exe -h 127.0.0.1 -p 6379 (p代表的是p ...

  3. java redis 过期_Redis中的键值过期操作

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...

  4. java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...

  5. java redis计数器_Redis原子计数器incr,防止并发请求

    一.前言 在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试.这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流 ...

  6. java redis 去重_redis去重方案

    tpn(taobao push notification)在使用redis计算消息未读数的过程中,遇到了一系列的问题,下面把这个过程整理了一下,也让大家了解这个纠结的过程,供大家以后使用redis或者 ...

  7. java redis 抽奖_Redis数据结构的多种用法(转载)

    分布式锁(string) setnx key value,当key不存在时,将 key 的值设为 value ,返回1.若给定的 key 已经存在,则setnx不做任何动作,返回0. 当setnx返回 ...

  8. java redis队列_redis队列实现高并发怎么用?Java如何使用redis队列解决高并发?

    小伙伴们大家好,不知道你们有没有在Java开发中遇到redis队列高并发,这个问题让你很头疼,今天小编就来讲解一下在Java中遇到redis队列高并发了,到底该怎么办. 高并发的业务场景: 我们做商品 ...

  9. java redis 并发_Redis高并发问题的解决方法

    本文讲述了Redis高并发问题的解决办法.分享给大家供大家参考,具体如下: redis为什么会有高并发问题 redis的出身决定 redis是一种单线程机制的nosql数据库,基于key-value, ...

最新文章

  1. 计算机书籍-C++并发编程实战
  2. RelativeLayout不能居中的解决的方法
  3. mysql bypass_Bypass MySQL Safedog
  4. 最简单的彩灯管理系统
  5. webpack 读取文件夹下的文件_TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建...
  6. 全球独家 | 赋予企业级开源无限可能,阿里云首发云数据库MongoDB 4.2版本
  7. Qt文档阅读笔记-共享库的创建与调用
  8. wing ide 3.x 中文设置
  9. 40XXX队技术员交接事项(1):基本资料交接
  10. Windows 8 相关资源 MSDN原版
  11. 基于Python的文字生成图片系统
  12. 老牌下载站fixdown被挂马 威金蠕虫开始复苏
  13. 音乐艺术与科技有何相关?Erkki Kurenniemi的音讯是如此
  14. plotly绘制简单图形4--饼形图
  15. 一步步学习SPD2010--第一章节--探索SPD2010(4)--使用SharePoint Designer创建站点
  16. linux++查找隐藏文件,使用find命令查找Linux中的隐藏文件的方法
  17. ios view改变重叠层次关系
  18. Linux网络编程基础知识
  19. Jess在Eclipse中的安装
  20. 2014年放假安排:除夕非法定假日

热门文章

  1. java example 去重_Java中mybatis关于example类的使用详解
  2. 三生三世之 数据挖掘
  3. 知识碎片 -> 外设原理图,铺满荆棘的道路
  4. 【剑指offer】登峰造极--数组中只出现一次的数字
  5. Linux小小白入门教程(十二):移动/复制命令
  6. 浩易南:线下手机销售维修店O2O思路
  7. SpringCloud-分布式配置中心【加密-非对称加密】
  8. Jmeter-RandomString和Random函数使用
  9. Warp:一款融资 23000000 美元,基于 Rust 开发、支持 GPU 加速的 21 世纪终端工具...
  10. html中tr和td怎么快速输入,HTML的tr和td标签