前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis总结

Redis总结

作者头像
爱撒谎的男孩
发布2019-12-31 15:07:45
4800
发布2019-12-31 15:07:45
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

文章目录

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中的对象,如下:
代码语言: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
代码语言:javascript
复制
<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中的命令是一样的
代码语言:javascript
复制
//操作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中添加如下内容
代码语言:javascript
复制
<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) -->

参考文档

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis
    • 数据库的分类
      • what
        • 特点
          • Redis安装
            • 第一种 yum 安装
            • 编译安装
          • 启动客户端
            • Redis 提供了5中数据类型
              • keys *
                • String类型命令
                  • SET
                  • get
                  • del
                  • append
                  • decr
                  • decrby
                  • incr
                  • incrby
                  • incrbyfloat
                  • strlen
                  • mset
                  • mget
                • Hash类型
                  • hset
                  • hget
                  • hdel
                • List 列表
                  • lpush
                  • LPOP
                  • rpush
                  • rpop
                  • LLEN
                  • BRPOP
                  • BLPOP
                • Set 集合
                  • SortedSet 有序集合
                    • Java 操作 Redis
                      • 添加依赖
                      • 测试
                    • Redis解决Session共享
                      • Session管理器
                      • 下载jar包
                      • 将下载的jar包放在每个应用服务器的Tomcat中
                    • 参考文档
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档