Redis总结

文章目录

1. Redis

1.1. 数据库的分类

1.2. what

1.3. 特点

1.4. Redis安装

1.4.1. 第一种 yum 安装

1.4.1.1. 常用命令

1.4.2. 编译安装

1.4.2.1. 配置环境变量

1.5. 启动客户端

1.6. Redis 提供了5中数据类型

1.7. keys *

1.8. String类型命令

1.8.1. SET

1.8.2. get

1.8.3. del

1.8.4. append

1.8.5. decr

1.8.6. decrby

1.8.7. incr

1.8.8. incrby

1.8.9. incrbyfloat

1.8.10. strlen

1.8.11. mset

1.8.12. mget

1.9. Hash类型

1.9.1. hset

1.9.2. hget

1.9.3. hdel

1.10. List 列表

1.10.1. lpush

1.10.2. LPOP

1.10.3. rpush

1.10.4. rpop

1.10.5. LLEN

1.10.6. BRPOP

1.10.7. BLPOP

1.11. Set 集合

1.12. SortedSet 有序集合

1.13. Java 操作 Redis

1.13.1. 添加依赖

1.13.2. 测试

1.14. Redis解决Session共享

1.14.1. Session管理器

1.14.2. 下载jar包

1.14.3. 将下载的jar包放在每个应用服务器的Tomcat中

1.15. 参考文档

Redis

数据库的分类

  • 关系型数据库
    • 存储表
    • 使用SQL
    • 也称为结构化数据库
    • 常见产品
      • MySQL
      • Oracle
      • SQL Server
      • DB2
  • 非关系型数据库
    • 泛指不使用SQL操作的数据库
    • 文档数据库
      • 存储文档
      • MogoDB,用于存储JSON文档
    • Key_Value数据库
      • 核心原理就是散列表(hash)
      • 查询性能奇高,经常作为数据库的缓存使用
      • 常见产品
        • MemoryCache
        • Redis

what

  • 一种非关系型Key_Value数据库

特点

  1. 是内存型数据库,同时提供了磁盘持久存储功能
  2. Redis采用散列表技术,查询性能高,可以达到千万级并发,Mysql的并发是千级并发
  3. Redis经常作为关系型数据库的缓存使用
  4. Redis支持5种数据类型

Redis安装

第一种 yum 安装

  • yum -y install redis

常用命令

  • systemctl start redis.service
  • ps -A | grep redis : 查看redis进程
  • systemctl restart redis.service
  • systemctl stop redis.service

编译安装

配置环境变量

  • export PATH=/usr/local/redis/bin:$PATH
  • redis-server : 启动redis

启动客户端

  • redis-cli,默认端口为6379

Redis 提供了5中数据类型

  • Redis为每种数据类型提供的对应的一组操作命令
    • String
    • Hash
    • List
    • Set
    • Sorted Set
  • 除了5中类型的命令,还提供了其他的命令
  • 都是指存储到数据库中的value的类型,key的类型永远都是字符串

keys *

  • 获取所有的key

String类型命令

  • 可以存储字符串,也可以存储数字(字符串形式),并且其中对数字的处理也提供了一些命令,便于我们操作数字

SET

  • set key value : 设置key的值为value,如果已经有值了,那么就会覆盖旧值
    • set message "hello world"
  • set key value EX seconds 设置key的值,并且过期时间为秒
    • set message "beijing" EX 10 : 10秒之后过期

get

  • get key : 获取指定key的值
    • get message

del

  • del key : 删除指定的key

append

  • append key value : 在指定的key后面追加值

decr

  • decr key : 如果key中存储的是一个数字,那么这个值将会减一,如果不是数字报错
    • set a "10",desr a: 执行这两个命令之后,a的值就是"9"

decrby

  • decrby key number : 减少number
    • decrby a 10

incr

  • incr key : 如果key中存储的是一个数据,那么值将会加一
    • incr a

incrby

  • incrby key number : 如果key中存储的数据是一个整型数据,那么增加number
    • incrby a 10 : a对应的整型数据+10

incrbyfloat

  • incrbyfloat key number : 增加浮点数
    • incrbyfloat a 10.4 :增加10.4
    • incrbyfloat a -10.5 : 减少10.5

strlen

  • str key : 获取指定key的长度

mset

  • mset a "cen" b "ceg":同时设置多个key-value

mget

  • megt key1 key2 .......... : 同时获取多个key的值

Hash类型

  • key是字符串的类型,其中的value是Hash类型,形式如下:
  • 简单的理解就是每一个key中对应的值相当于Java中的对象,其中的value就是成员变量的字段和对应的值

hset

  • hset key field value : 为指定的key设置其中的域为field的值为value
    • hset user name "chenjiabing" : 设置key为username域的值为chenjiabing
    • hset user age "22"
    • hset user password "123456"
  • 形象的输出就好像是javascript中的对象,如下:
user={
    "name":"chenjiabing",
    "age":"22",
    "password":"123456"
}

hget

  • hget key field : 获取指定key中的域为field的值
    • hget user name : 获取name的值

hdel

  • hdel key field : 删除指定的域
    • hdel user name : 删除user中的name域

List 列表

  • 实际上是一个双向队列,可以在左侧插入,左侧取出,右侧插入,右侧取出

lpush

  • lpush key value ..... : 从左侧插入一个或者多个value
    • lpush list 1 32 3 "chenjiabing" : 在左侧插入4个value

LPOP

  • lpop key : 从左侧取出一个值,那么此时的list的长度就会减一
    • lpop list : 取出一个值

rpush

  • rpush key value ..... : 从右侧插入一个或者多个值
    • rpush list 1 3 4

rpop

  • rpop key : 从右侧取出一个值
    • rpop list : 从右侧取出一个值,那么长度减一

LLEN

  • LLEN key : 查看长度
    • LLEN list

BRPOP

  • BRPOP key timeout :阻塞从右侧取值, 从右侧取出数据,如果其中的数据为空,那么等待timeout秒,如果其中一旦插入数据就会立即返回
    • BROP list 60 : 从右侧取出list中的数据,如果list中没有数据那么等待60s,如果一旦其中插入了数据,会立即返回数据

BLPOP

  • BLPOP key timeout : 阻塞从左侧取值
    • BLPOP list 60

Set 集合

  • 不重复

SortedSet 有序集合

Java 操作 Redis

添加依赖

  • Jedis
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.9.0</version>
</dependency>

测试

  • 开启6379端口
    • firewall-cmd --zone=public --add-port=6379/tcp
  • 如果显示firewall not running
    • start firewalld.service
  • 测试如下
    • Jedis中的方法名和Redis中的命令是一样的
//操作String类型的数据
@Test
public void testString(){
	Jedis jedis=new Jedis("47.104.192.157");  //创建jedis对象,其中的参数是IP地址,如果是本地写localhost
	jedis.set("name", "chenjiabing");   //添加一个String 类型的数据  key为name
	jedis.get("name");  //获取key为name的值
	jedis.del("name");  //删除key为name的数据
       jedis.close();
}

//测试Hash类型
@Test
public void testHashSet(){
	Jedis jedis=new Jedis("localhost");
	jedis.hset("user", "name","陈加兵");   //添加一个key为user的Hash类型的数据
	jedis.hset("user", "age", "22");   //添加age
	jedis.hincrBy("user", "age", 200);   //年龄增加200
	String name=jedis.hget("user", "name"); //获取name的值
	Integer age=Integer.parseInt(jedis.hget("user", "age"));  //获取age的值,转换为Integer类型
	System.out.println(name);
	System.out.println(age);
       jedis.close();
	
}

//测试List类型
@Test
public void testList(){
	Jedis jedis=new Jedis("localhost");
	jedis.lpush("list", "陈加兵");  //从左侧添加一个值
	System.out.println(jedis.llen("list"));  //获取长度
	jedis.lpush("list", "1","2","TOM");  //左侧存放多个值
	System.out.println(jedis.rpop("list"));  //从右侧取出
       jedis.close();
}

Redis解决Session共享

  • 当浏览器登录,Nginx会分发请求给应用服务器,此时的这个服务器中保存了该用户的session,但是可能再次请求的时候,Nginx会把请求分发给另外一个应用服务器,那么又需要重新登录一次。我们可以使用Nginx的ip_hash策略解决这个问题,但是我们也可以使用Redis解决
  • 我们将session id存放在Redis中,每一个应用服务器都从Redis中获取Session id
  • 需要一个远程数据库Redis,并且所有的应用服务器(Tomcat)共享这个远程数据库,那么Redis中的sessionId才能实现共享存取

Session管理器

下载jar包

将下载的jar包放在每个应用服务器的Tomcat中

  • 不适用于Tomcat8.*
  • 这里是要修改每一台应用服务器上面的Tomcat内容,这样才能实现多台应用服务器中的SessionId共享
  • 将jar包放在Tomcat目录中的lib文件夹下
  • 修改Tomcat目录下的conf/context.xml中添加如下内容
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="47.104.192.157" <!-- 服务器的IP,这个是Redis数据库所在服务器的IP -->
         port="6379" <!-- 端口 "6379" -->
         database="0" <!-- optional: defaults to "0" -->
         maxInactiveInterval="60" /> <!-- 失效时间 "60" (in seconds) -->

参考文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring-Data-Redis

    2、需要在spring-data-redis中开启redis事务,只需要添加如下一条语句即可

    爱撒谎的男孩
  • 分布式锁-redis实现

    爱撒谎的男孩
  • 二分查找

    爱撒谎的男孩
  • Redis zset 的一些使用

    最近做排行信息的时候用到了 Redis 的 Sorted Set, 写篇文章来和大家分享一波。

    haoming1100
  • 高并发架构系列:Redis的基本介绍,五种数据类型及应用场景分析

    Redis数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

    用户5546570
  • Redis基础你掌握多少了?来查漏补缺?

    Redis 是开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串strings, 散列 hashes, 列...

    猿哥
  • Redis基础你掌握多少了?来查漏补缺?

    Redis 是开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串strings, 散列 hashes, 列...

    用户3578099
  • redis中各种数据类型的常用操作方法汇总

    string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。 string类型是二进制安全的。意思是re...

    小勇DW3
  • 系列 | Spark之数据倾斜调优

    有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾...

    暴走大数据
  • Redis设置Key的过期时间 – EXPIRE命令

    为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。

    ydymz

扫码关注云+社区

领取腾讯云代金券