Redis的简单认识与基本操作

1.Redis概述

1.1 NoSql

1.1.1 概念

NoSql = Not Only SQL,泛指非关系型数据库
非关系型数据库:不遵循sql标准,事务,表结构等等,严格上来讲,其并不是一种数据库,应该是一种数据结构化存储方法的集合;一般用于超大规模,高并发的数据环境下。
关系型数据库:以关系(由行和列组成二维表)来建模的数据库。

1.1.2 分类

官网【link]http://www.nosql-database.org/
非关系型数据库分类

1.2 Redis

redis是一个key-value类型的非关系型数据库!主要用来做缓存!其为我们提供了一些方法,只需调用特定方法就能把数据保存为特定数据结构。

1.3 Redis特点

  • 数据存储——数据保存在内存中,存取速度快,并发能力强;支持持久化,可以将数据保存在硬盘的文件中。。
  • value类型多——支持存储的value类型多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型);可以对关系数据库(如MySQL)起到很好的补充作用。
  • 超大并发支持——支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
  • 客户端支持——提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
  • 支持订阅/发布(subscribe/publish)功能——群聊。

1.4 Mysql、Memcached和Redis的比较

Mysql、Memcached和Redis的比较
存储过期:即存储有效期,数据过了有效期就没了;如短信验证码,红包,优惠券等等。
Memcached和Redis的相同点和不同点?

  • 相同点:
    都是key-value类型Nosql,都存放数据到内存中,读写效率高,而且都支持存储过期。
  • 不同点:
    redis相较于Memcached还支持持久化到磁盘,数据安全更高。
    redis相较于Memcached支持value类型更多。

1.5 应用场景

  • 中央缓存
    Redis的数据存放于内存中,能极大提高查询效率。
  • 计数器
    网站统计注册用户数,浏览数,转发数,点赞数等等。
  • 实时攻防系统
    暴力破解(穷举法)
  • 排行榜
    积分榜,音乐榜,礼物打赏榜等等。
  • 有效期
    红包,优惠券,短信验证码等等。
  • 自动去重
    Uniq 操作,获取某段时间所有数据排重值 ;使用 Redis 的 set 会自动去重。
  • 队列
    秒杀:可以把名额放到内存队列(redis),内存就能处理高并发访问。
  • 消息订阅系统
    Redis 的 Pub/Sub 系统可以构建实时的消息系统,如QQ群消息。

2.Redis的安装与使用

2.1 Windows环境

①下载Redis
网址:http://redis.io/download
redisbin32 或 redisbin64
② 绿色软件,无需安装,解压即可
解压目录介绍
③启动redis服务
带配置文件启动
在redis-server.exe服务端根目录下cmd进入磁盘操作系统
带配置文件启动
再启动redis-cli.exe客户端,如果事先有设置密码,需校验密码(下面会详细介绍)
不带配置文件启动
启动redis-server.exe服务端后再启动redis-cli.exe客户端
④连接到redis进行操作(非必需操作)
cmd>{%redis%}/redis-cli -h ip地址 -p 端口号
ip 默认为本地 -p 默认6379
cmd>{%redis%}/redis-cli

2.2 Linux环境

①下载redis源码
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
或者使用ftp上传redis-3.0.6.tar.gz
②安装redis
tar xf redis-3.0.6.tar.gz //解压
cd redis-3.0.6 //不需要配置参数 不需要执行./configure
make && make install//编译&&安装
③将redis设置为系统服务
cp (redis源码目录)utils/redis_init_script /etc/init.d/redis
vim /etc/init.d/redis //修改红框处的代码
④修改redis.conf配置文件
mkdir /etc/redis //创建/etc/redis目录
cp redis.conf /etc/redis/redis.conf
vim /etc/redis.conf
//将redis配置文件复制到redis
//设置为守护进程,以后台方式运行
使用service redis start命令启动redis服务.
⑤将redis服务设置为开机启动
chkconfig –-add redis
chkconfig –level 35 redis on

3.Redis操作

3.1 使用redis-cli 客户端操作redis

3.1.1 对value为string类型的常用操作

set key value//将字符串值value关联到key
get key       //返回key关联的字符串值

set/get

mset //同时设置一个或多个 key-value 对
mget //返回所有(一个或多个)给定 key 的值

mset/mget

incr key //将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)
decr key //将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)
incrBy key num//自增多少
decrBy key num//自减多少

incr/decr

3.1.2 对key的常用操作

keys *  //获取所有key列表
del key  //删除key
expire key xx //设置key的过期时间(xx秒后过期)
ttl key //查看key的过期时间

keys*
del
expire
ttl

3.1.3 其他操作

select 0-15 选择库  默认16个数据库
flushall //清空整个redis服务器数据,所有的数据库全部清空
flushdb  //清除当前库,redis中默认有16个数据库,名称分别为0,1,2.。。15

select/flushdb/flushall

3.1.4 对list集合的常用操作

list,控制一边进同一边出就是栈,一边进另一边出就是队列.
list集合可以看成是一个左右排列的队列(列表)

lpush key value //将一个或多个值 value 插入到列表 key 的表头(最左边)
rpush key value //将一个或多个值 value 插入到列表 key 的表尾(最右边)
lrange key 0 -1 //遍历

push/range

lpop key //移除并返回列表 key 的头(最左边)元素。
rpop key //移除并返回列表 key 的尾(最右边)元素。

pop

lrange key start stop//返回列表 key 中指定区间内的元素,查询所有的stop为-1即可
lrem key count value//根据count值移除列表key中与参数 value 相等的元素count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值。
lindex key index //返回列表 key 中,下标为 index 的元素
ltrim key start stop //对一个列表进行修剪

lrange

3.1.5 对set集合的常用操作

set集合是一个无序的不含重复值的队列

sadd  key member //将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
srem key member//移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略
smembers key    //返回集合 key 中的所有成员。

sad/srem/smembers

3.1.6 对SortedSet(有序集合)的操作

有序集合

3.1.7 对hash类型的常用操作

hset key name value//添加一个name=>value键值对到key这个hash类型
hget key name //获取hash类型的name键对应的值
hmset key name1 key1 name2 key2 //批量添加name=>value键值对到key这个hash类型
hmget key name1 name2//批量获取hash类型的键对应的值
hkeys //返回哈希表 key 中的所有键
hvals //返回哈希表 key 中的所有值
hgetall //返回哈希表 key 中,所有的键和值

hash

3.1.8 事务

Redis的事务为弱事务,对数据无严格要求,适用于日志。
Redis的事务在执行exec指令时,才批量执行操作,没有回滚操作。

multi  //标记一个事务块的开始。
exec   //执行所有事务块内的命令。
discard //取消事务,放弃执行事务块内的所有命令。

transacation

3.1.9 订阅/发布

SUBSCRIBE channel [channel ...] //订阅给定的一个或多个频道的信息。
PUBLISH channel message //将信息 message 发送到指定的频道 channel 。

①新开一个客户端订阅tv频道
订阅tv频道
②发布nihao!消息到tv频道
消息发到TV频道
③订阅tv频道的客户端可以收到nihao!消息
收到消息

3.1.10 设置密码

  • 通过命令动态调整密码-临时设置
CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效
CONFIG SET requirepass 123456 //将密码设置为123456
CONFIG SET requirepass "" //清除密码
AUTH 123456  //输入密码进行认证

动态调整密码

  • 通过配置文件设置密码-长久设置
在配置文件redis.conf中增加一行代码
requirepass 123456
将密码123456设置到配置文件中,redis启动时加载该文件,即可启用密码
重新启动服务端
鉴权
AUTH 123456  //输入密码进行认证

4.java操作Redis

4.1 简单实现

①通过idea创建maven项目
②导包

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.4.2</version>
    </dependency>

③实现

public class RedisTest {
    @Test
    public void testSet() throws Exception {
        //获取连接
        Jedis jedis = new Jedis("127.0.0.1");
        //添加数据
        jedis.set("name", "zed");
        //关闭连接
        jedis.close();
    }

    @Test
    public void testGet() throws Exception {
        //获取连接
        Jedis jedis = new Jedis("127.0.0.1");
        //获取数据
        System.out.println(jedis.get("name"));
        //关闭连接
        jedis.close();
    }
}

4.2 jedis工具类抽取

public enum RedisUtil {
    INSTANCE;
    private static JedisPool jedisPool = null;

    static {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(20);//设置繁忙时最大连接数
        config.setMaxIdle(5);//设置空闲时最大连接数
        config.setMaxWaitMillis(2 * 1000);//最大等待时间
        config.setTestOnBorrow(true);//获取连接时测试连接是否畅通
        jedisPool = new JedisPool(config, "127.0.0.1", 6379, 2 * 1000, "123456");//配置信息,ip,端口号,等待时间,密码
    }
	//拿到jedis
    public Jedis getJedis() {
        return jedisPool.getResource();
    }
	//关闭资源
    public void closeResource(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }
}

4.3 jedis常用方法

  • Key操作
exists:判断key是否存在
set:设置key的值
get:获取key的值
keys:获取所有key
del:删除key及其值
expire:设置key的生存时间
ttl:获取key的剩余生存时间
  • String操作
set:添加/修改
get:获取
append:追加
del:删除
  • List操作
lpush:设置列表值
lrange:遍历,0,-1
lrem:删除
lset:修改
sort:排序
  • Set操作
sadd:添加成员
srem:删除
smember:查看所有成员
sinter:交集
sinterstore:交集保存到心得Set
sunion:并集
sunionstore:并集保存到心得Set
sdiff:差集(我有你没有)
sdiffstore:差集保存到新的Set
  • Hash操作
hset:设置或者修改
hgetAll:获取所有
hdel:删除
hincrBy:自增
hkeys:查询所有的key
hvalues:查询所有的value
  • Jedis排序
sort排序
	数字,不用加sorttingParams
	字母需要加,并且是指assii值排序
@Test
public void testJedisList() throws Exception{
    Jedis jedis = JeditUtil.INSTANCE.getJedis();
    //清空当前数据库
    jedis.flushDB();
    jedis.lpush("nums","12","14","6","9","10","13");
    System.out.println("nums原始的位置:"+jedis.lrange("nums",0,-1));
    System.out.println("nums排序之后的值 升序:"+jedis.sort("nums"));

    SortingParams sortingParams = new SortingParams();
    sortingParams.desc();
    System.out.println("nums排序之后的值:"+jedis.sort("nums",sortingParams));

    jedis.lpush("letters","a","d","f","c","k","e");
    SortingParams sortingParams1 = new SortingParams();
    sortingParams1.alpha();
    System.out.println("字母排序:"+jedis.sort("letters",sortingParams1));

    JeditUtil.INSTANCE.closeJedis();
}

5.Redis持久化配置

Redis有两种存储方式:内存存储和磁盘存储。
持久化配置是指通过修改redis.conf配置的方式实现持久化
持久化方式:RDBAOF

redis.conf

  • RDB
#在10秒的时间内至少有一次改变存储,就持久化一次
save 10 1

弊端:如果在10秒内改变存储未完成,可能会丢失10秒的数据。

  • AOF
appendonly yes         //yes 开启,no 关闭
# appendfsync always //每次有新命令时就执行一次fsync 
#这里我们启用 everysec
appendfsync everysec //每秒 fsync 一次
# appendfsync no      //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)

6.Redis淘汰策略

redis里的数据是有时效性的,为优化数据,选择合适的淘汰策略很有必要。
当redis存放的数据到达配置的最大内容后,会按照配置淘汰策略进行淘汰。

redis.conf

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值