redis初识及基本操作
一.redis介绍:
1.Redis是什么:
REmote DIctionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key-Value)分布式内存数据库。
基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人称为数据结构服务器。
2.Redis的三个特点:
1)Redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用 2)Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储 3)Redis支持数据的备份,即master-slave模式的数据备份
3.Redis能干啥:
1)内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务。 2)取最新记录。如:将最新的10条评论的ID放在Redis的List集合里面。 3)模拟类似于HttpSession这种需要设定过期时间的功能 4)发布、订阅消息系统 5)定时器、计数器
4.redis使用场景
1、对数据高并发的读写,可以使用redis数据库。 2、对海量数据的高效率的存储和访问,可以使用redis数据库。 3、对数据的高可扩展性和高可用性要求比较高的也可以使用redis数据库。 4.对列
二.redis简单命令使用
1.启动与关闭
1.启动
- 服务端:service redisd start 或者 redis-server(前端启动)
- 客户端:radis-cli -h ip -p port(6798)
2.关闭:由客户端关闭:
- 连接状态:shutdown
- 非连接状态:redis-cli shutdown
2.增
set k1 v1
3.查
get k1
4.改
getset k1(数据库已经存在的值)
5.key通用操作
keys * 查询所有的key exists key #测试指定key是否存在 del key1 key2 key3 #删除给定的key type key #返回给定的value的类型 keys pattern #返回匹配指定模式的所有key rename oldkey newkey#改名字 dbsize #返回当前数据库的key数量 expire key seconds #为key指定过期时间(生命周期) #没有生命周期,生存时间是-1(永久生存)
ttl key #返回key的剩余过期秒数(还有多少寿命,过期-2了就会被删除,) select db-index #选择数据库 move key db-index #将key从当前数据库移动到指定数据库 flushdb #删除当前数据库中所有key flushall #删除所有数据库中的所有key
三. redis的五大基础数据类型
key | value | 备注 |
k1 | '小明' | string |
k2 | {name:张三,age:18} | hash |
k3 | [1,2,3,4,5] | list 添加删除效率极高 |
k4 | ['a','b'] | set |
k5 | [5000'金牌',3000'银牌'] | 有序的set |
1.字符串
String(字符串) string是redis最基本的类型,string类型是二进制安全的。可以包含任何数据。
比如jpg图片或者序列化对象。一个redis字符串value最多可以是512M。
为什么二进制是安全的:
字符串常用操作和命令: 1.追加 (相当于拼接)
append key value(如果key不存在则创建一个key) 2.获得字符串长度
strlen key 3.针对数字的操作(一定要是数字)
增1: incr key (如果可以不存在,则创建key,并默认为0 ,增1之后就是1,如果key不是数字类型则返回错误信息)
减1: decr key(如果可以不存在,则创建key,并默认为0 ,减1之后就是-1,如果key不是数字类型则返回错误信息)
增一定值: incrby key 10(key的值加10)
减一定值1: decrby key 5(key的值减五)
4.截取操作
getrange 键 起始坐标 结束坐标(-1表示全部)
5.范围替换
setrange key 起始坐标 替换内容
6.创建的时候设置过期时间(set with expire)
创建并设置:setex key 秒速 值
7.不存在才能创建(存在则不会创建)(set if not exist)
setnx key value
8.创建多个和获取多个
mset/mget k1 va k2 vb ==>msetnx(不存在才能创建成功)
9.先获取再改值
getset k1 llaa(拿到k1的值并把k1的值修改为llaa)
注意:key不能太长也不能太短,否则会影响效率,最好有代表意义
10.赋值
set key value:创建一个可以并赋值,如果可以已存在则覆盖
11.取值
get key value:取出key的之,这个值必须是String类型,否则会报错,get只能用于String类型,不存在返回(nil)
12.删值
del key 返回值为整形,表示删了几条数据
2.Hash(哈希)
类似于python的字典 Redis hash 是一个键值对集合。是一个string类型的field和value的映射表,hash特别适合用于存储对象
其实就是类似于字典套字典的结构:{hash:{key:value}}
常用命令操作:
1)hset/hget/hmset/hmget/hgetall/hdel key field value
2)查询长度 hlen
3)某key是否存在某key hexists key1 key2
4)获取所有key hkeys key
5)获取所有value hvals key
6)加法 hincrby/hincrbyfloat
7)存在则赋值 hsetnx key主 key子 value
3.List(列表)
底层是个链表,相当于python中的List,关于链表的概念,看下图
list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。
这使得list既可以用作栈,也可以用作队列
为什么选择链表:redis中进行最多的就是增删!!!
常用命令
1)lpush/rpush/lrange
2)左出右出 lpop/rpop
3)按坐标获取元素 lindex 键 下标序号
4)获取集合长度 llen 键
5)删除N个值 lrem 键 个数 值
6)截取指定范围的值后再赋值给key ltrim key 开始位置 结束位置
7)转移1个元素 rpoplpush 原列表 目的列表 (从原来列表尾部弹出到目标列表头部)
如果原列表和目标列表是同一个,就变成循环列表了
8)替换某个位置的值 lset key index value
9)在某个值旁边插入某个值 linsert key before/after 值1 值2
总结:
一、键不存在,创建新的链表,键已存在,新增内容。
二、没有值则对应键也消失
三、对头位置处理快,中间位置很尴尬~
4.Set(集合)
Redis的Set是string类型的无序不重复集合,它是通过HashTable实现的
set元素最大可以包含(2的32次方-1)个元素。
关于set集合类型除了基本的添加删除操作,
其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。
常用命令
0)添加 sadd set1 v1/v2 重复的不会添加 1)插入 set key value1/value2/value3(value重复有且只添加一个) 2)查看 smembers key 3)存在多少个某值 sismember key value 4)获取集合里面的元素个数 scard key 5)删除集合中元素 srem key value 6)某个整数(随机出几个数) srandmember key 个数 7)随机出栈 spop key 8)将key1的某个值赋给key2 smove key1 key2 value 9)数字集合类的处理 差集:sdiff 源key 目标key 交集:sinter 源key 目标key 并集:sunion 源key 目标key
10)取到我们要的结果,存在另一个新的集合里面
sunionstore/sdiffstore/sinterstore destination key[key...]
5.Zset(sorted set:有序集合,可以做排行榜)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员Redis
不同的是每个元素都会关联一个double类型的分数
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
常用命令
1)添加一个有序集合 zadd key 分数1 value1 分数2 value2
zadd set1 200 xioaming 500 xiaohong 400 xiaozhang (集合添加后就固定顺序了,从小到大)
2)获取值 zrange key 起始位置 结束位置
zrange set4 start end[with score](范围查询,获得脚标为为start到end,with score还代表了指定分数的成员 0 -1)
3)连值带分数的获取 zrange key 起始位置 结束位置 withscores 4)根据分数范围来获取 zrangebyscore key 开始分数 结束分数
注:给结束分数带 ( 表示不包含 +limit 起始偏移量 截取个数 5)某分数下对应的value值,删除元素
zrem key
zrem set4 xiaoming(删除指定成员)
6)获取个数 zcard
zcard set4 (查看集合的key的个数)
7)获取分数区间个数 zcount key 开始分数 结束分数 8)根据值获取下标 zrank key value 9)根据值获取分数 zscore key value
zscore set1 xiaoming (返回指定成员的分数)
10)逆序获取下标 zrevrank key value 11)逆序输出值 zrevrange key 开始位置 结束位置 zrevrange set4 start end[with score] 逆序输出,由大到12)逆序分数获取值 zrevrangebyscore key 高分数 低分数
13)范围删除值 zremrangebyrank key start stop
zremrangebyrangk set1 0 1 把前两个删除
14)根据值范围删除
zremrangebyscore set1 500 1000
15)根据范围取最大最小值
zranggebyscore set1 500 1000 limit 0 1
16)在范围区间有多少个元素
zcount set1 500 1000
17)排名
zrangk set1 xiaoming (返回索引值)
18)倒叙排名
zrevrangk set xiaoming
四. 消息的订阅与发布
类似弹窗消息(qq弹出新闻)
1. PUBLISH channel msg
将信息 message 发送到指定的频道 channel
2.SUBSCRIBE channel [channel ...]
订阅频道,可以同时订阅多个频道
3.UNSUBSCRIBE [channel ...]
取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道
4.PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等),
news.* 匹配所有 以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类
5.PUNSUBSCRIBE [pattern [pattern ...]]
退订指定的规则, 如果没有参数则会退订所有规则
6.PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态
注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。
五.redis多数据库
1. mysql可以自定义数据库 create database xxx 2. redis默认有16个数据库(0-15) 默认在0号数据库 3. 切换数据库select (0-15) 4. 数据库与数据库不能共享键值对 5. 数据库的之间的数据移植
move key1 5(把当前数据库key1移动到5号数据库)
六.redis事务
1. mysql事务保证数据的完整性 2. redis事务保证数据可批量化进行
multi:事务开启(开启队列,事务开启后,没有提交之前,全部加到query等待exec提交) begin transation
exec:提交(队列中可以执行的都执行,即使中间有某些事务执行不成功,后面的也会继续执行) commit
discard:回滚(把执行队列中的所有操作) rollback
七.redis其他命令
1. dbsize:数据库中key的数量 2. info 关于redis数据库的信息 3. qiut 断开连接 4.ping
pong连接上了
redis初识及基本操作的更多相关文章
- Redis数据类型的基本操作
Redis数据类型的基本操作 一.string类型 1.设置value
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
- Python初识文本基本操作
初识文本的基本操作 怎么在文件里面写内容和都内容 文件操作过程 1,找到文件 文件路径 2,打开文件 file_obj=file(文件路径,模式) 3,文件操作,读写文件 file_obj.read( ...
- flask 第七章 简陋版智能玩具 +MongoDB初识和基本操作
1.简陋版web智能玩具 FAQ.py文件 import os from aip import AipSpeech, AipNlp from uuid import uuid4 "" ...
- Redis初识
安装与使用 Redis-x64-3.2.100:服务端 + 客户端 redis-3.2.5:源代码 Redis Desktop Manager - v0.8.8:客户端(基于Qt5的跨平台Redis桌 ...
- 第1讲 Redis部署与基本操作
目录 一.简介 二.安装 1.默认安装位置 2.指定安装位置 3.安装的可执行文件的作用 三.启动与关闭 四.配置文件 五.Redis的数据类型 1. 共计5种类型 2. String(子串类型) 3 ...
- Memcached·Redis缓存的基本操作
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- 01.redis初识
Redis学习: redis是什么? Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 不过Redis在生产环境中使用最多的功能是缓存系统.至于其 ...
- Redis数据库及其基本操作
Redis 是一个高性能的key-value数据库, 支持主从同步, 完全实现了发布/订阅机制, 因此可以用于聊天室等场景. 主要表现于多个浏览器之间的信息同步和实时更新. 和Memcached类似, ...
随机推荐
- Python之路:面向对象及相关
其他相关 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstan ...
- 详解CSS盒模型(转)
详解CSS盒模型 阅读目录 一些基本概念 盒模型 原文地址:http://luopq.com/2015/10/26/CSS-Box-Model/ 本文主要是学习CSS盒模型的笔记,总结了一些基本概 ...
- php 中两种获得数据库中 数据条数的方法
一种是传统的利用mysql_num_rows()来计算 $sql="select * from news"; $res=mysql_query($sql); $number=mys ...
- Java-马士兵设计模式学习笔记-迭代器模式-模仿Collectin ArrayList LinckedList
Java Iterator模式 Java Iterator模式, 模仿Collectin ArrayList LinckedList 一.有如下几个类 1.接口Collection.java 2.接口 ...
- post请求时,出现relationship name error
原因:在post请求,其属性名在代码中已经修改为partyLocationDtos,但是在swagger中,仍然为partyLocations. 因此,报错.记住,在post请求的时候,要一一对应.写 ...
- 导入project后lib文件夹一直没有jar包
原因: 导入project,倒错了项目,只因为后面新建的项目名称有和前面的差不多,导致自己选择了原来的项目,因此,项目的注解一直报错.
- Servlet处理表单数据
Servlet 表单数据 很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 使用 ...
- HttpGet和HttpPost处理重定向的区别
get方法默认会处理302的重定向,response获取到的页面其实是重定向以后的页面,通过response.getStatusLine(),取到的值是200. 通过设置可以用post方法去请求或者把 ...
- 小小c#算法题 - 10 - 求树的深度
树型结构是一类重要的非线性数据结构,树是以分支关系定义的层次结构,是n(n>=0)个结点的有限集.关于树的基本概念不再作过多陈述,相信大家都有了解,如有遗忘,可翻书或去其他网页浏览以温习. 树中 ...
- 原型模式与serializable
写原型模式时课件上有一个实现模式是利用可串行化接口实现,然后就发现那个代码(如下),串行化接口里面没有函数,这种接口被曾为标记接口,implements这个接口后就可以对其进行各种流操作了,其实就是O ...