一.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初识及基本操作的更多相关文章

  1. Redis数据类型的基本操作

    Redis数据类型的基本操作 一.string类型 1.设置value

  2. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

  3. Python初识文本基本操作

    初识文本的基本操作 怎么在文件里面写内容和都内容 文件操作过程 1,找到文件 文件路径 2,打开文件 file_obj=file(文件路径,模式) 3,文件操作,读写文件 file_obj.read( ...

  4. flask 第七章 简陋版智能玩具 +MongoDB初识和基本操作

    1.简陋版web智能玩具 FAQ.py文件 import os from aip import AipSpeech, AipNlp from uuid import uuid4 "" ...

  5. Redis初识

    安装与使用 Redis-x64-3.2.100:服务端 + 客户端 redis-3.2.5:源代码 Redis Desktop Manager - v0.8.8:客户端(基于Qt5的跨平台Redis桌 ...

  6. 第1讲 Redis部署与基本操作

    目录 一.简介 二.安装 1.默认安装位置 2.指定安装位置 3.安装的可执行文件的作用 三.启动与关闭 四.配置文件 五.Redis的数据类型 1. 共计5种类型 2. String(子串类型) 3 ...

  7. Memcached·Redis缓存的基本操作

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  8. 01.redis初识

    Redis学习: redis是什么? Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 不过Redis在生产环境中使用最多的功能是缓存系统.至于其 ...

  9. Redis数据库及其基本操作

    Redis 是一个高性能的key-value数据库, 支持主从同步, 完全实现了发布/订阅机制, 因此可以用于聊天室等场景. 主要表现于多个浏览器之间的信息同步和实时更新. 和Memcached类似, ...

随机推荐

  1. Condition实现多线程顺序打印

    Condition实现多线程顺序打印: import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.R ...

  2. Action层, Service层 和 Dao层的功能区分

    Action/Service/DAO简介:  Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO ...

  3. linux所有文件中查找关键字的命令

     grep 192.168.1.1 * -r    在所有文件中查找192.168.1.1

  4. python3-while与if

    # Auther: Aaron Fan age_of_oldboy = 56 #定义一个while循环的起始判断值countcount = 0#当count小于3的情况下一直执行while循环whil ...

  5. Paint类的介绍

    * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类,一类与图形绘制相关,一类与 ...

  6. shape不同版本这间的兼容

    在做那个只有左边上面是圆角和只有右边下边是圆角的时候,出现了一个问题,那就是在android3.0以前,android:bottomLeftRadius与android:bottomRightRadi ...

  7. 探讨js闭包

    背景:爱就要大胆说出来,对于编程我只想说,喜欢就大胆写出来.喜欢却不行动那就意味着失败.所以,对于在研究编程的猿们,我对同伴们说,大胆的学,大胆的写.呵呵,说这些其实无非是给我自己点动力,写下去的勇气 ...

  8. WPF之MVVM模式(1)

    MVVM模式 一.MVVM模式概述 MVVM Pattern : Model\View\ViewModel View:视图.UI界面 ViewModel:ViewModel是对Model的封装,通过一 ...

  9. windows下启动Apache报443错误!

    windows下启动apache报make_sock: could not bind to address [::]:443错误! 查看指定端口的占用情况 netstat -aon|findstr & ...

  10. Tomcat 集群 + Redis Session 共享出现 Session 瞬间失效问题

    写在前面的话 写这篇博客出于公司最近要迁移到新的云上面且对之前的资源,架构做一个升级. 本来是一个不大的项目,旧环境旧一个 TOMCAT 跑起来,不过出于高可用考虑,新环境决定使用 TOMCAT 集群 ...