redis入门学习

来源:互联网 发布:windows无法格式化cf 编辑:程序博客网 时间:2024/06/07 05:13

一、NoSQL的概述

1、什么是NOSQL?

NoSQL = Not Only SQL(不仅仅是sql)

        非关系型数据库

2、为什么要使用NoSQL

高并发读写(场景:海量用户同时动态的读写:微博评论、回复)

        海量数据的高效率存储和访问(大量用户同时登录:腾讯)

高可扩展性和高可用性(场景:数据库横向扩展)

3、NoSQL数据库的四大分类

键值(key-value)存储:优势:快速查询。劣势:存储数据缺少结构化

列存储:HBase 优势:快速查询。劣势:功能少

文档:mongoDB 

图形:

4、NoSQL的特点

(1)易扩展(因为是非关系型数据库,数据之间没有关系,所以可以根据需要扩展)

(2)灵活的数据模型(不需要提前建立一些字段,表结构)

(3)大数据量、高性能(高读写性能)

(4)高可用(在不影响高读写性能下使用高可用框架)

二、Redis的概述、

(知乎、新浪、gitHub),用C语言开发的

应用场景:

用来做缓存:数据的查询、商品的内容

任务队列:抢购、秒杀

网站统计:

数据过期处理:

排行榜:

分布式架构中session的分离

三、Redis的安装和使用

搭建环境:

(1)虚拟机:VMware 10.0.2

(2)Linux系统:CentOS-6.5

(3)SSH客户端:SecureCRT7.3 SecureFX7.3

基于C语言开发,在编译redis的时候,需要GCC环境(打开 SecureCRT7.3  输入命令:yum install gcc-c++) 需要输入y

四、Jedis的入门

Jedis介绍:

(1)java客户端开发包,用来在java中操作redis

(2)地址:https://github.com/xetorthio/jedis(jedis中jar包有:commons-pool.jar、jedis.jar) 


五、Redis的数据类型

key定义的注意点:

不要过长:不要超过1024byte ,否则会影响查询效率、消耗内存

不要过短:例如就一个字符

要有统一的命名规范

存储String 

(1)二进制安全的,所以存入和获取的数据相同

2)value的最大长度为512M

(3)常用命令:

赋值:set key值  value值

取值:get  key值      

修改:getset key值  value值

删除:del key值      

数值增减:incr/decr  key值  (如果key不存在,则初始化为0,然后递增/减1;如果key为不可转换为整型,则报错)

扩展命令:

  自由数值增减:incrby/decrby  key值  num(数值)  如果key不存在,则初始化为0,然后递增/减1;如果key为不可转换为整型,则报错

拼接字符串:append key值 字符串

存储Hash

Sting的key和String的value的Map容器(适合存储用户名、密码之类)

常用命令:

    赋值:

hset  key值  键值对(username liwanli)--单个属性赋值

hmset key值  键值对(username liwanli password 123456)--多个属性赋值

    取值:

hget key值 username --取key中单个属性值

hget key值 username  password --取key中多个属性值

hgetAll key值 --取全部属性值

    删除:

hdel key值 username --删除key中单个属性值

hdel key值 username password --删除key中多个属性值

del key值 -- 直接删除key(相当于数据库中的drop 干掉表结构)

    自学命令:

hexists key值  属性名 (判断某个key中属性是否存在)

hkeys  key值 (获取key中所有的属性名)

hvals  key值 (获取key中所有的属性值)

hlen key值 (获取key中所有属性值的长度)

    增加数字:hincyby key值 属性值 加多少

存储List:

1、ArrayList:使用数组的方式。查询利用下标索引比较快。新增、删除涉及到位移操作,所以相对比较慢

2、LinkedList:使用双向链表,每个元素头和尾都有指向前一个和后一个的指针。插入、删除操作只是改变前后元素的指向,所以速度很快。但是查询就慢

常用命令:

两端添加:lpush key值 元素 (左侧添加) rpush key值 元素 (右侧添加)

两端删除:lpop/rpop  key值 (删除的第一个元素和最后一个元素)

查询:lrange key值  start end(范围:如果值为-1则表明是倒数第一个,一次类推)

获取列表元素个数:llen key值

扩展命令:

lpushx/rpushx  key值 元素(当且仅当key存在)

删除元素:lrem key值  count(几个元素) 指定的元素-- 

当count>0,代表从头至尾(从左至右)删除count个指定的元素

当count<0,代表从尾至头(从右向左),倒序删除count个指定的元素

当count=0,代表删除key中所有的指定的元素

存储Set:

无序不可重复:去重

使用场景:

跟踪一些唯一性数据

用户维护数据对象之间的关联关系

常用命令:

添加:sadd key值 元素

删除:srem key值 元素

查询:

获取set中所有成员:smembers key值  (sismember key值 元素--判断元素是否存在)

获取set中所有成员的个数:scard key值

随机获取set元素 :srandmember key值

集合中的差集运算:

sdiff key值   key2值(返回两个集合相差的元素,与集合顺序有关)

sdiffstore key1值 key2值 key3值(把差集结果存在key1值中)

集合中的交集运算:

sinter key值   key2值

sinterstore key1值 key2值 key3值(把集结果存在key1值中)

集合中的并集运算:

  sunion key值   key2值

sunionstore key1值 key2值 key3值(把集结果存在key1值中)

存储Sorted-Set

Sorted-Set和Set的区别:有分数所以redis可以对其排序。有序的。

使用场景:游戏排名、微博热话题

六、keys的通用操作


七、Redis的特性


八、Redis的持久化