博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis-笔记
阅读量:5237 次
发布时间:2019-06-14

本文共 5675 字,大约阅读时间需要 18 分钟。

 

 

一、Redis的数据操作(了解)

(一)操作list

1. 添加数据

  • lpush/rpush

    左边添加: lpush key value1 value2 ……

    右边添加: rpush key value1 value2 ……

  • lpushx/rpushx

    左边添加: lpushx key value

    右边添加: rpushx key value

 

lpush/rpush lpushx/rpushx的区别:

    lpushx/rpushx一次只能添加一个数据,而lpush/rpush可以一次性添加多个数据

    如果key不存在,lpushx/rpushx会添加不进去;而lpush/rpush会创建key然后添加数据进去

2. 查看数据

  • lrange key start end

  说明:

               start:开始索引

        end:结束索引

      查询时包含头和尾

  • 应用示例:

      lrange mylist 0 3:查询mylist中索引0到索引3的数据

      lrange mylist 0 -1:查询mylist中所有数据

 3.获取数据

  • lpop/rpop

      lpop key 弹出(获取)左边第一个

      rpop key: 弹出(获取)右边第一个

 4.获取list长度

      llen key:获取key对应list的长度

 5.其它操作

  • 设置数据:

      lset key index value    设置索引index的值为value

  • 插入数据:

      linsert key before pivot value:在坐标值pivot前边插入value

      linsert key after pivot value:在坐标值pivot后边插入value

  • 删除数据:

      lrem key count value    删除key对应listcountvalue值(count为负数时,表示从后往前删

  • rpoplpush

      rpoplpush key1 key2     弹出key1右边的值,添加到key2的左边

(二)操作set

Redis时的集合set,更类似于数学里的集合。无序不重复

 1.set集合操作

  • 添加成员:

      sadd key member1 member2 ……

  • 获取所有成员:

      smembers key

  • 随机获取一个成员:

      srandmemeber key

  • 获取成员的数量:

      scard key

  • 删除成员:

      srem key member1 member2 ……

  • 判断是否set的成员:

      sismember key member

 2.set集合运算

  • 计算交集:多个集合共有成员

      sinter key1 key2 ……

  • 计算并集:多个集合的所有成员

      sunion key1 key2 ……

  • 计算差集:一个集合有,但是另一个集合没有的成员,分方向

      sdiff key1 key2 ……

  • 计算交集并保存结果

      sinterstore key key1 key2 ……:计算key1key2 ……的交集,把结果保存到key

  • 计算并集并保存结果

      sunionstore key key1 key2 ……:计算key1key2 ……的并集,把结果保存到key

  • 计算差集并保存结果

      sdiffstore key key1 key2 ……:计算key1key2 ……的差集,把结果保存到key

(三)操作zset(sorted set)

zset里的数据不重复,取出数据的时候有顺序

 1.添加成员

      zadd key score1 member1 score2 member2 ……

 2.单成员操作

  • 查询某成员的分数:

      zscore key member

  • 查询某成员的排名:

      zrank key member:排名从0开始,默认按分数从低到高排列

      zrevrank key member:排名从0开始,按照分数从高到低排列

  • 修改某成员的分数:

      zincrby key 增加的分数 member

 3.范围查询成员

  • 按排名范围查询成员:

      zrange key start end [withscores]     查询排名从startend的成员,默认分数从低到高排列

      zrevrange key start end [withscores]    查询排名从startend的成员,分数从高到低排列

  • 按分数范围查询成员:

      zrangebyscore key min max [withscores] [limit index size]      查询分数从minmax的成员,分数从低到高

      zrevrangebyscore key max min [withscores] [limit index size]   查询分数从minmax的成员,分数从高到低

 4.数量统计

  • 统计成员总个数:

      zcard key

  • 按分数范围统计个数:

      zcount key min max

 5.删除成员

  • 删除指定成员:

      zrem key member1 memeber2 ……

  • 按分数范围删除成员

      zremrangebyscore key min max

  • 按排名范围删除成员

      zremrangebyrank key start end

(四)通用key操作

 查询key:

    keys pattern       pattern中可以出现*?*表示任意个任意字符,?表示一个任意字符

    keys my*

 删除key:

    del key

 判断key是否存在:

    exists key

 重命名key:

    rename key newkey

 设置key有效期:

    expire key 秒数       设置key有效期为指定的秒数,过期自动失效

 查询key剩余有效期:

    ttl key                得到key的剩余有效期秒数

    如果结果是-2,表示key已经超期

    如果结果是-1,表示key没有设置有效期

 查看key的类型:

    type key

二、Jedis(重点)

(一)什么是Jedis

Jedsi=Java Redis

Servlet=Server Applet

在实际开发中,需要使用程序代码来操作RedisRedis数据库官方提供了Java程序操作Redis的方式:Jedis

Java要操作Redis,需要引入相关的jar包如下:

 commons-pool2-2.3.jar

 jedis-2.7.0.jar

 

(二)Jedis的应用

 1.Jedis相关的API

  • Redis的连接对象:Jedis

    构造方法:Jedis(String ip, int port)

    操作常用的方法:jedis对象操作Redis数据库的方法名,和命令名称完全一样。

设置字符串:

    命令:set key value

    方法:jedis.set(String key, String value);

获取字符串:

    命令:get key

    方法:jedis.get(String key);

删除字符串:

    命令:del key

    方法:jedis.del(String key);

list里左边添加一个数据:

    命令:lpush key value

    方法:jedis.lpush(String key, String value);

释放资源:jedis.close();

2. jedis的基本使用方法

//获取连接

Jedis jedis = new Jedis(String ip, int port);

//操作redis数据库,用什么方法操作:想执行什么命令,就使用什么方式。方法名称和命令的名称是一样的

jedis.set(“name”,”tom”);

String name = jedis.get(“name”);

//释放资源

jedis.close();

 3. Jedis连接池

  • API

   连接池类:JedisPool

   构造方法:

      JedisPool(String host, int port);

      JedisPool(JedisPoolConfig config, String host, int port);

      jedisPoolConfig:连接池的配置信息对象

    无参构造:JedisPoolConfig()

   设置参数:

      setMaxTotal(int maxTotal)

      setMaxIdle(int maxIdle)

     hostRedis的地址

     portRedis的端口

方法:

Jedis jedis = pool.getResource();

  • 操作步骤:

//创建连接池对象:JedisPool

//从连接池里获取连接:Jedis

//操作redis数据库

//释放资源

(三)使用JedisUtils工具类操作Redis

//获取连接

Jedis jedis = JedisUtils.getJedis();

//操作redis

//释放资源

JedisUtils.close(jedis);

(四)补充:加载properties配置文件的方式

1. 使用Properties对象

    Properties prop = new Properties();

    prop.load(properties文件的一个输入流对象);

    String value = prop.getProperty(String key);

2. 使用ResourceBundle工具类

ResourceBundle bundle = ResourceBundle.getBundle(String filename);

注意:

    filename:默认是从src下加载的properties文件,并且文件名称不需要加后缀名

    String value = bundle.getString(String key);

三、Redis特性(了解)

(一)多数据库

一个Redis默认提供了16个库:0~15,默认使用的是0号库。可以通过修改配置文件的方式,来更改库的数量。

vim  redis.conf

修改  databases  数量

保存并退出vim

重启Redis服务,重新加载配置文件

1. 多数据库的操作

  • 切换库:

      select n    n是库的序号。

  • 移库:

      move key n   key移动到n号库

  • 退出:

      quit

  • 查询库中key的数量:

      dbsize

  • 刷新当前库(清空当前库):

      flushdb

  • 刷新所有库(清空所有库):

      flushall

(二)事务

Redis里的事务是伪事务:在Redis里开启事务之后,执行的所有命令被放在了一个队列里;等事务提交时,Redis会从队列中取出命令挨个执行;如果其中任意一个出现异常,Redis会pass掉继续往下执行。

开启事务:multi

执行n条命令----会被放在一个队列里

提交事务:exec      执行队列里的命令

回滚事务:discard  抛弃队列里的命令

四、Redis持久化(了解)

Redis的数据是保存在内存中的,但是也提供了持久化机制,可以把内存中的数据持久化保存到磁盘文件里。

Redis提供了两种持久化机制:RDB模式和AOF模式。其中RDB是默认开启的,而AOF需要手动配置开启。

(一)RDB模式-快照模式

Redis会定时把内存中的数据备份,生成“快照文件”。文件名称是dump.rdb,默认被保存在了Redis的安装目录里。

可以通过修改redis.conf来修改RDB的持久化配置:

save 900 1  1次更改,900秒存一次

save 300 10 10次更改,300秒存一次

save 60 1000010000次更改,60秒存一次

 

优点:

    性能略高一些

缺点:

    可能会丢失数据,不够安全

(二)AOF模式-append only file

每次对Redis进行变更操作时,Redis都会把执行的命令保存到文件中。当Redis重启时,会自动读取这个文件,重新执行文件里的所有命令,重构数据库。

AOF需要手动开启,可以通过redis.conf更改配置:

appendonly yes                        #默认是no,未开启AOF。设置为yes表示开启AOF模式。

appendfilename “appendonly.aof”      #默认生成的AOF文件名称

AOF持久化有三种配置方式:

appendfsync always            #总是保存。执行的每一次数据变更命令,都会被保存到文件中

appendfsync everysec        #每秒保存一次

appendfsync no                  #不保存

 

优点:

    数据比较安全,丢失数据的可能性比较低

缺点:

    性能低

    可能保存很多无用的操作命令

转载于:https://www.cnblogs.com/djw1314-94-08-31/p/9504246.html

你可能感兴趣的文章
根据拼音检索数据的方法
查看>>
安装部署Apache Hadoop (本地模式和伪分布式)
查看>>
Cenos7—安装
查看>>
Visual C++: DLL
查看>>
SVO原理解析
查看>>
中缀表达式转后缀表达式
查看>>
web端接入AliOss存储
查看>>
思维导图的作用
查看>>
Mybatis 存储过程调用
查看>>
Google Python 风格指南
查看>>
PHP操作redis
查看>>
github 使用教程初级版
查看>>
《软件测试》实验 实验五 测试技术
查看>>
C++中变量命名规范
查看>>
【迭代器】
查看>>
mysql常用命令小结
查看>>
CSS ZOOM 作用[IE6下清除浮动]
查看>>
SDN关键技术-Segment Routing协议简介
查看>>
【XSY2679】修墙 最短路
查看>>
jvm 内存溢出问题排查方法
查看>>