redis入门

NoSql概述

介绍

  • Not Only Sql
  • 非关系型数据库

特点

  • 易拓展
  • 灵活的数据模型
  • 大数据量,高性能
  • 高可用

能解决那些问题

  • High performance - 高并发读写
  • Huge Storage - 海量数据的高效率存储和访问
  • High Scalability & High Availability - 高可扩展性和高可用性

nosql主流产品

  • mongoDB
  • Redis

四大分类

  • 键值对存储(key-vaule)
  • 列存储
  • 文档数据库
  • 图形数据库

支持的键值数据类型

  • 字符串类型
  • 列表类型
  • 有序集合类型
  • 散列类型
  • 集合类型

应用场景

  • 缓存
  • 任务队列
  • 访问统计
  • 过期数据处理
  • 应用排行榜
  • 分布式架构中的session分离

安装

  • 环境建议安装在linux上 需要gcc
    安装gcc命令yum install gcc-c++;提示是否下载的话输入 y
  • 把redis下载的压缩文件上传到linux上
    解压 “tar -zxvf 压缩文件名”
    进到解压后的目录 redis-3.0.7
  • 然后执行make,
    执行make之后安装make PREFIX=/usr/local/redis(指定安装的路径) insatll
    进到安装路径 cd /usr/local/redis 在此目录下的bin目录下 redis-server就是启动命令 ./redis-server 前段启动需修改
    原来的路径redis-3.0.7下找到redis.conf,复制到刚才安装的目录/usr/local/redis下,修改里面daemonize no 把no改为yes
    然后在/usr/local/redis目录下执行 " ./bin/redis-server ./redis.conf " 默认端口6379 " ./bin/redis-cli shutdown " 来关闭
    通过./bin/redis-cli连接进入服务
    set key value 存入数据;
    get key 获取数据

jedis入门

  • 官网首选java客户端开发包,引入到对应的项目
  • 6379端口开放 vim /etc/sysconfig/iptables ,增加如下一行
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
  • 开发和使用基础方式
  1. 设置ip地址和端口
    Jedis jedis = new Jedis(“ip”,“port”);
  2. 保存数据
    jedis.set(“key”,“value”);
  3. 获取数据
    jedis.get(“key”);
  4. 释放资源
    jedis.close();
  • 开发和使用连接池方式
  1. 获得连接池的配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(30); // 设置最大连接数
    config.setMaxIdle(10);// 设置最大的空闲连接数
  2. 获得连接池
    JedisPool pool = new JedisPool (config,“ip”,port);
    3.获得核心对象
    Jedis jedis = null;
    try{
    jedis = pool .getResource();// 通过连接池获取连接
    jedis.set(“key”,“value”);//存数据
    jedis.get(“key”);//获取数据
    }catch(Exception e){
    e.print();
    }finally{
    //释放资源
    if(jedis != null){
    jedis.close();
    }
    if(pool != null){
    pool .close();
    }
    }

数据结构,key不要太长

  • string :最常用,二进制方式存入,最大512M;常用命令1.赋值set,getset先获取再赋值;2.取值get;3.删除del;4.扩展命令;5.数值增减 incr递增1;decr递减;incrby 指定加n decrby指定减 ;append拼接字符串

  • hash :,可以看做是String做Key和Value的Map容器; 可以有子property嵌套结构,方便只召回部分property;常用命令:1.赋值:“hset hash(集合名) key value” ,hmset 例:hmset myhash2(集合名) username role age 21; 2.取值:“hget hash key”;hmget获取多个属性值;hgetall hash,可以获取到此对象的属性和值;3.删除,hdel 删除单个或多个属性“hdel myhash(集合名) key1 key2 ”;del删除整个集合;4.加和减, 加:hincrby hash key num表示key值加5;5.判断是否存在 hexists hash key;6.hlen hash获取属性数量;7.hkeys hash获得所有的key

  • list :按照插入顺序排序的链表,无内容时key也移除;
    1.ArrayList使用数组方式
    2.LinkedList使用双向链表的方式
    3.双向链表中增加数据
    4.双向链表中删除数据
    list的常用命令:
    1.两端添加"lpush mylist a b c" 表示从左侧把a b c三个元素添加到mylist表中;“rpush list 1 2 3 ”从右侧添加
    2.查看列表:lrange list start end 可以0或负数;
    3.两端弹出:lpop list 弹出第一个元素,空时返回nil,弹出之后值就清掉
    4.获取列表元素个数:llen list
    5.扩展命令:lpushx mylist 其中mylist存在时会在头部插入数据,不存在不执行;rpushx 同上在尾部执行;lrem mylist count value 表示从头开始往后删除count个value; count为负表示从后面开始往前删除;count为0表示删除所有的value;lset 根据脚标设置元素值如:lset mylist 2 a 表示把mylist的第三个元素的值设置为a;linsert mylist before value value1,表示在集合mylist中的value之前插入数据value1,after可在之后插入;rpoplpush mylist1 mylist2 表示把mylist1的位数弹出压入到mylist2的头部

  • set :和list的区别是不允许出现重复的元素;
    set常用命令:
    1.添加/删除元素 : "sadd myset a b"表示往myset中添加a和b;“srem myset a b"表示删除myset中的a和b元素;
    2.获得集合中的元素:smembers myset查看myset的元素,sismember myset a查看myset中是否存在a
    3.集合中的差集运算:sdiff myaset mybset查看myaset和mybset的差值与顺序有关
    4.集合中的交集运算:sinter myaset mybset可以求得交集
    5.集合中的并集运算:sunion myaset mybset可得到并集结果
    6.扩展命令:scard myset可以得到myset的数量;srandmember 随机返回集合中的一个成员;sdiffstore把两个集合相差的存到另一个集合,如:sdiffstore myset myaset mybset表示把myaset和mybset的差值存到myset中;sinterstore及sunionstore类似sdiffstore

  • sorted-set:有一个分值关联,按分值排序,在集合中的位置有序
    常用命令:
    1.添加元素:zadd mysort 70 zs 80 ls 表示添加zs和ls分值分别为70和80;zadd mysort 100 zs会替换原有的分数
    2.获得元素:zscore mysort zs 表示获得zs的分值;zcard mysort可以得到成员的数量
    3.删除元素:zrem mysort zs ls 删除zs和ls元素
    4.范围查询:zrange mysort 0 -1 查询出来所有;后面可带withscores显示出分值从小打到排序的;zrevrange可从大到小排序;zremrangebyrank mysort 0 2 表示按照范围0到2进行删除;zremrangebyscore mysort 70 75 按照分值70到75之间的进行删除;zrangebyscore mysort 0 70 表示查询分值0到70的元素, 后面可带withscores显示出分值,可带limit 0 2只显示前两个
    5.扩展命令:zincrby mysort 3 zs 给zs加3分;zcount mysort 80 90查看80到90分的数量

  • zset:类似java的treeSet实现使用跳表(跳过一定步长)加压缩表的方式,双向链表;

  • keys通用操作
    1.keys * 查看所有的key
    2.keys my? 查看以my开头的key
    3.del my1 my2 删除my1和my2
    4.exists my1 查看my1是否存在
    5.get key获取key的内容
    6.rename a1 b1把key a1改名成b1
    7.expire mykey 1000 设置mykey的过期时间为1000秒,单位秒
    8.ttl mykey查看mykey剩余的超时时间
    9.type mykey 查看mykey的数据类型

redis特性

  • 可连接16个数据库,默认连接下表最小的0 通过select n切换,n从0到15
  • move myset 1表示移动myset这个key到1号数据库
  • 支持事务操作multi开启 exec提交 discard回滚

数据持久化,可同时使用也可配置不持久化

  • rdb:存取全量数据,备份和存储周期以另一个线程做驱动,默认方式
  • aof:存取增量数据;到期写、到次数写

缓存淘汰策略

  • lru:根据key最近最少使用的淘汰,往往作为默认
    1.allkeys:所有
    2.volatile:设置过期时间的
  • ttl:从已设置过期时间中挑选将要过期的淘汰
  • random:数据中随机淘汰
    1.allkeys:所有
    2.volatile:设置过期时间的
  • no-enviction:禁止驱逐,直接报错;一般用于保证数据不能丢失的场景

单线程及原子性

  • setnx:设置一个值返回true,如果值已存在返回false不会修改已存在的值,单线程处理,可以保证原子性,work Thread为内存级别的执行,避免cpu切换一般把对应的work Thread绑定在固定的cpu执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依然、、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值