java redis教程_Redis 使用教程 (全)
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 使用教程 (全)相关推荐
- java redis 下载_redis Java源代码 redis.rar - 下载 - 搜珍网
压缩包 : redis.rar 列表 redis/.classpath redis/.mymetadata redis/.project redis/.settings/.jsdtscope redi ...
- java redis 原子操作_redis快速入门
Redis服务的启动 redis-server.exe redis.windows.conf 连接Redis服务器 redis-cli.exe -h 127.0.0.1 -p 6379 (p代表的是p ...
- java redis 过期_Redis中的键值过期操作
1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...
- java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...
- java redis计数器_Redis原子计数器incr,防止并发请求
一.前言 在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试.这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流 ...
- java redis 去重_redis去重方案
tpn(taobao push notification)在使用redis计算消息未读数的过程中,遇到了一系列的问题,下面把这个过程整理了一下,也让大家了解这个纠结的过程,供大家以后使用redis或者 ...
- java redis 抽奖_Redis数据结构的多种用法(转载)
分布式锁(string) setnx key value,当key不存在时,将 key 的值设为 value ,返回1.若给定的 key 已经存在,则setnx不做任何动作,返回0. 当setnx返回 ...
- java redis队列_redis队列实现高并发怎么用?Java如何使用redis队列解决高并发?
小伙伴们大家好,不知道你们有没有在Java开发中遇到redis队列高并发,这个问题让你很头疼,今天小编就来讲解一下在Java中遇到redis队列高并发了,到底该怎么办. 高并发的业务场景: 我们做商品 ...
- java redis 并发_Redis高并发问题的解决方法
本文讲述了Redis高并发问题的解决办法.分享给大家供大家参考,具体如下: redis为什么会有高并发问题 redis的出身决定 redis是一种单线程机制的nosql数据库,基于key-value, ...
最新文章
- 计算机书籍-C++并发编程实战
- RelativeLayout不能居中的解决的方法
- mysql bypass_Bypass MySQL Safedog
- 最简单的彩灯管理系统
- webpack 读取文件夹下的文件_TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建...
- 全球独家 | 赋予企业级开源无限可能,阿里云首发云数据库MongoDB 4.2版本
- Qt文档阅读笔记-共享库的创建与调用
- wing ide 3.x 中文设置
- 40XXX队技术员交接事项(1):基本资料交接
- Windows 8 相关资源 MSDN原版
- 基于Python的文字生成图片系统
- 老牌下载站fixdown被挂马 威金蠕虫开始复苏
- 音乐艺术与科技有何相关?Erkki Kurenniemi的音讯是如此
- plotly绘制简单图形4--饼形图
- 一步步学习SPD2010--第一章节--探索SPD2010(4)--使用SharePoint Designer创建站点
- linux++查找隐藏文件,使用find命令查找Linux中的隐藏文件的方法
- ios view改变重叠层次关系
- Linux网络编程基础知识
- Jess在Eclipse中的安装
- 2014年放假安排:除夕非法定假日
热门文章
- java example 去重_Java中mybatis关于example类的使用详解
- 三生三世之 数据挖掘
- 知识碎片 -> 外设原理图,铺满荆棘的道路
- 【剑指offer】登峰造极--数组中只出现一次的数字
- Linux小小白入门教程(十二):移动/复制命令
- 浩易南:线下手机销售维修店O2O思路
- SpringCloud-分布式配置中心【加密-非对称加密】
- Jmeter-RandomString和Random函数使用
- Warp:一款融资 23000000 美元,基于 Rust 开发、支持 GPU 加速的 21 世纪终端工具...
- html中tr和td怎么快速输入,HTML的tr和td标签