Radis初阶 Radis基本命令与在Springboot中访问Radis

2024-06-15 1535阅读

阿里网盘链接

文章目录

    • 初始NoSQL数据库
      • 对比MySQL数据库
        • 从结构方面:
        • 从关系方面:
        • 从查询方式:
        • 从事物方面:
        • Redis入门
          • Redis数据结构
          • 访问Radis
            • 通用命令(tab键:自动补全)
              • KEYS
              • DEL
              • EXISTS
              • EXPIRE
              • TTL
              • String类型常见命令
                • SET
                • GET
                • MSET
                • MGET
                • INCR
                • INCRBY
                • DECR
                • SETNX
                • SETEX
                • Hash类型常见命令
                  • HSET
                  • HGET
                  • HMSET
                  • HMGET
                  • HGETALL
                  • HKEYS
                  • HVALS
                  • HINCRBY
                  • List类型常见命令
                    • LPUSH
                    • LPOP
                    • RPUSH
                    • RPOP
                    • LRANGE
                    • BLPOP
                    • BRPOP
                    • Set类型常见命令
                      • SADD
                      • SREM
                      • SCARD
                      • SISMEMBER
                      • SMEMBERS
                      • SINTER
                      • SDIFF
                      • SUNION
                      • SortedSet类型常见命令
                        • ZADD
                        • ZREM
                        • ZSCORE
                        • ZRANK
                        • ZCARD
                        • ZCOUNT
                        • ZINCRBY
                        • ZRANGE
                        • ZRANGEBYSCORE
                        • ZRANGEBYSCORE
                        • ZDIFF/ZINTER/ZUNION
                        • 使用KEY命令
                        • java的radis编程客户端(Spring Data Radis整合了Jedis和Lettuce)
                          • Jedis客户端的使用
                          • Jedis链接池
                          • Springboot集成springDataRedis使用步骤
                          • RedisTemplate的RedisSerializer序列化工具
                              • 自定义RedisSerializer步骤
                              • StringRedisTemplate向radis客户端传入对象数据

                                初始NoSQL数据库

                                对比MySQL数据库

                                从结构方面:
                                1. SQL数据库是一个结构化的数据库:对于数据库中的每一个字段都有相对应的严格的约束。约束不好进行修改

                                2. NoSQL数据库是一个非结构化的数据库:

                                  • 键值型数据库,对键和值的定义约束很随意

                                  • 文档型,将数据一条一条的存储进去,一般使用json,字段描述是任意的id、name都可以

                                  • 图类型(graph)数据库,数据作为结点,用联系连接

                                从关系方面:
                                1. SQL:有关联的数据库使用外键以关联两个表之间的关系。具体体现在两个已经关联的表不能轻易删除其中一个;
                                2. NoSQL:无关联的数据库使用json嵌套的方式描述表之间的关系。首先没有关联,有冗余。
                                从查询方式:
                                1. SQL查询的语法相对固定
                                2. NoSQL查询的语法使用相对宽松,没有相对的标准,不同的NoSQL数据库的查询语法都不同。
                                  • 使用起来相对起来简单,熟悉
                                从事物方面:
                                1. SQL满足ACID
                                2. NoSQL满足BASE,不能完全满足ACID

                                Radis初阶 Radis基本命令与在Springboot中访问Radis

                                Redis入门

                                Radis初阶 Radis基本命令与在Springboot中访问Radis

                                Redis数据结构

                                redis是一个键值型的数据库,key一般是String类型,不过value有多种数据类型

                                Radis初阶 Radis基本命令与在Springboot中访问Radis

                                redis命令行的使用

                                官方文档(可以使用edge浏览器翻译)

                                访问Radis

                                我们有两种方式来访问Radis数据库

                                1. 命令行客户端

                                  • 使用语法:

                                  • redis-cri -h ... -p [端口号]

                                    AUTH 123321

                                  • 图形化客户端

                                通用命令(tab键:自动补全)

                                命令行查看通用命令

                                help [commands]{keys/del}

                                KEYS

                                查看符合模板的所有key,不建议在生产环境下使用。因为它采用的事模糊查询

                                查询所有

                                key *

                                DEL

                                删除多个指定的key

                                del k1 k2 k3

                                EXISTS

                                判断一个值是否存在

                                EXISTS age

                                EXPIRE

                                给一个key设置有效期,有效期到时key会被自动删除(单位:秒)

                                EXPIRE number 16

                                TTL

                                查看一个key的剩余有效期(-1 表示永久有效,-2表示没有查询到)

                                TTL number

                                String类型常见命令
                                SET

                                添加或修改一个已经存在的一个String类型的键值对

                                SET age 18

                                GET

                                根据key获取String

                                GET age

                                MSET

                                批量添加多个String类型的键值对

                                MSET k1 v1 k2 v2 k3 v3

                                MGET

                                批量添加多个key获取多个String类型的数据

                                GET k1 k2 k3

                                INCR

                                让一个整数型的key自增1

                                INCR age

                                INCRBY

                                让一个整数型的key按照指定步长自增

                                INCRBY age 2

                                DECR

                                让一个整数型的key自减1

                                DECR age

                                INCRBYFLOAT

                                让一个浮点数增长指定步长

                                INCRBYFLOAT score 0.5

                                SETNX

                                添加一个String类型的键值对,前提是这个key不存在,否则不知选哪个

                                SETNX name2 lisi

                                SETEX

                                添加一个String类型的键值对,并指定有效期(单位:秒)

                                SETEX name 20 wangwu

                                Hash类型常见命令

                                Hash结构可以将对象中的每一个字段独立存储,对单个字段做CRUD

                                Radis初阶 Radis基本命令与在Springboot中访问Radis

                                HSET

                                添加或者修改hash类型key的field的值

                                HSET me:user:3 age 71

                                HGET

                                获取一个hash类型的key的value值

                                HGET me:user:3 age

                                HMSET

                                添加多组hash类型的key的value值

                                HMSET me:user:3 name Lili age 20 sex man

                                HMGET

                                获取多个hash类型的key的value值

                                HMGET me:user:3 name age sex

                                HGETALL

                                获取所有指定的key

                                HGETALL me:user:3

                                HKEYS

                                获取一个Hash类型中key的所有的field

                                HKEYS me:user:3

                                HVALS

                                获取一个Hash类型中key所有的value

                                HVALS me:user:3

                                HINCRBY

                                使得Hash类型中的一个字段自增

                                HINCRBY me:user:3 age 2

                                List类型常见命令

                                Redis中的List类型可以看做是一个双向链表的结构。可以正向检索和反向检索。

                                特点:

                                • 有序
                                • 元素可以重复
                                • 插入和删除速度快
                                • 查询速度一般
                                  LPUSH

                                  向列表左侧插入一个或多个元素

                                  LPUSH users 1 2 3

                                  LPOP

                                  移除并返回列表左侧的第一个元素(单位个数)

                                  LPOP 1

                                  RPUSH

                                  向列表右侧插入一个或多个元素

                                  LPUSH users 4 5 6

                                  RPOP

                                  移除并返回列表右侧的第一个元素(单位个数)

                                  RPOP 1

                                  LRANGE

                                  返回一段角标范围内的所有元素

                                  LRANGE 1 2

                                  BLPOP
                                  BRPOP
                                  Set类型常见命令

                                  Redis的Set结构与java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个Hash表,因此具备与HashSet类似的特征:

                                  • 无序
                                  • 元素不可重复
                                  • 查找快
                                  • 支持交集、并集、差集等功能
                                    SADD

                                    向set中添加一个或多个元素

                                    SADD s1 a b c

                                    SREM

                                    移除set中的指定元素

                                    SADD s1

                                    SCARD

                                    返回set中的元素个数

                                    SCARD s1

                                    SISMEMBER

                                    判断一个元素是否在set中

                                    SISMEMBER s1 a

                                    SMEMBERS

                                    获取set中的所有元素

                                    SMEMBERS s1

                                    SINTER

                                    求set1和set2的交集

                                    SINTER set1 set2

                                    SDIFF

                                    求set1和set2的差集

                                    SDIFF set1 set2

                                    SUNION

                                    求set1和set2的并集

                                    SUNION set1 set2

                                    SortedSet类型常见命令

                                    可以排序的ste集合。SortedSet的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表加Hash表;SortedSet具备下列特性:

                                    • 可排序性
                                    • 元素不重复
                                    • 查询速度快

                                      注意:经常被用于排行表这个功能

                                      ZADD

                                      添加一个或多个元素到Sortedset,如果已经存在,则更新

                                      ZREM

                                      删除Sortedset中的一个指定元素

                                      ZSCORE

                                      获取Sortedset中的指定元素的score值

                                      ZRANK

                                      获取Sortedset的指定元素的排名

                                      ZCARD

                                      获取Sortedset中元素的个数

                                      ZCOUNT

                                      统计score值在给定范围内的所有元素的个数

                                      ZINCRBY

                                      让Sortedset中的指定元素自增,步长为制定的值

                                      ZRANGE

                                      按照score排序后,获取指定排名范围内的元素

                                      ZRANGEBYSCORE

                                      按照score排序后,获取制定score范围内的元素

                                      ZRANGEBYSCORE

                                      按照score排序后,获取指定score范围内的元素

                                      ZDIFF/ZINTER/ZUNION

                                      求差集、交集、并集

                                      使用KEY命令

                                      层级格式存储:用于分别不同类型的数据

                                      set me:user:2 ‘{“id”:2,“name”:“Rose”,“age”:18}’

                                      set me:product:1 ‘{“id”:2,“name”:“小米11”,“price”:4999}’

                                      在图形客户端中会自动形成文件夹分级,从而实现观感上的提升

                                      java的radis编程客户端(Spring Data Radis整合了Jedis和Lettuce)

                                      Jedis客户端的使用

                                      Jedis官方网址

                                      1. 常见一个Maven工程
                                      2. 引入Jedis依赖和单元测试依赖(junit5)
                                      3. 建立连接
                                      private jedis jedis;
                                          
                                      @BeforeEach
                                      void setUp(){
                                      	// 建立连接 (第一个参数,radis客户端的ip地址;第二个参数,radis客户端的端口号)
                                          jedis = new Jedis("192.168.150.101",6379);
                                          // 设置密码
                                          jedis.auto("123321");
                                          // 选择(第一个)库
                                          jedis.select(0);
                                      }
                                      
                                      1. 测试string
                                      @Test
                                      void testString(){
                                          // 插入数据,方法就是radis的名称
                                          String result = redis.set("name","张三");
                                          System.out.println("result = " + result);
                                          // 获取数据
                                          String name = jedis.get("name");
                                          System.out.println("name = " + name);
                                      }
                                      @Test
                                      void testHash(){
                                          // 插入Hash数据
                                          jedis.hset("user:1","name","jack");
                                          jedis.hset("user:1","age","18");
                                          // 获取hash数据资源
                                          Map map = jedis.hgetAll("user:1");
                                          // 打印输出
                                          System.out.println(map);
                                      }
                                      
                                      1. 释放资源
                                      @AfterEach
                                      void tearDown(){
                                          // 释放资源
                                          if(jedis != null){
                                              jedis.close();
                                          }
                                      }
                                      

                                      Jedis链接池

                                      public class JedisConnectionFactory{
                                          private static final JedisPool jedisPool;
                                          
                                          static{
                                              JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
                                              // 最大链接
                                              jedisPoolConfig.setMaxTotle(8);
                                              // 最大空闲连接
                                              jedisPoolConfig.setMaxIdle(8);
                                              // 最小空闲连接
                                              jedisPoolConfig.setMinIdle(0);
                                              // 设置最长等待时间,ms
                                              jedisPoolConfig.setMaxWaitMillis(200);
                                              // 参数分别为连接池对象、redis的ip地址、端口号、密码
                                              jedisPool = new JedisPool(jedisPoolConfig,"192.168.150.101",6379,1000,"123321")
                                          }
                                          
                                          // 获取Jedis对象
                                          public static Jedis getjedis(){
                                              return jedisPool.getResource();
                                          }
                                      }
                                      

                                      步骤:

                                      1. 配置连接池

                                      2. 创建连接池对象

                                      3. 上面的“建立连接”步骤可以改为:

                                        • jedis = JedisConnectionFactory.getjedis();
                                        • 关闭连接的操作也在底层中与前面的略有区别(改为了释放资源)

                                      Springboot集成springDataRedis使用步骤

                                      spring 已经自动整合了SpringDataRedis,并且已经自动装配

                                      步骤:

                                      1. 引入依赖
                                          org.springframework.boot
                                          spring-boot-starter-data-redis
                                      
                                      
                                      
                                          org.apache.commons
                                          common-pools
                                      
                                      
                                      1. 配置radis的地址信息(yml)
                                      spring:
                                      	redis:
                                      	host:192.168.150.101
                                      	port:6379
                                      	password:123321
                                      	lettuce:
                                      		pool:
                                      			max-active:8 #最大连接数量
                                      			max-idle:8 #最大空闲连接
                                      			min-idle:0 #最小空闲连接
                                      			max-wait:100 #连接等待时间
                                      
                                      1. 注入RedisTemplate(自动装配:拿来就用)
                                      @Autowired
                                      private RedisTemplate redisTemplate;
                                      
                                      1. 编写测试
                                      @SpringBootTest
                                      public class RedisTest{
                                          @Autowired
                                          private RedisTemplate redisTemplate;
                                          
                                          @Test
                                          void testString (){
                                              // 插入一条String类型的数据
                                              redisTemplate.opsForValue().set("name","李四");
                                              // 读取一条String类型的数据
                                              Object name = redisTemplate.opsForValue().get("name");
                                              System.out.println("name=" + name);
                                          }
                                      }
                                      

                                      RedisTemplate的RedisSerializer序列化工具

                                      原生的radis使用的是JDK的RedisSerializer,但是在实际应用中,生成的key和value是不好用的,key的字符串非常的长;value的字符串转换为了16进制数。

                                      自定义RedisSerializer步骤
                                      1. 在pom中引入Jackson依赖
                                          com.fasterxml.jackson.core
                                          jackson-databind
                                      
                                      

                                      将类用@Configuration注释后使用

                                      @Bean
                                      public RedisTemplate redisTemplate(RadisConnectionFactory radisConnectionFactory) throws UnknownHostException{
                                          // 创建Template对象
                                          RedisTemplate redisTemplate = new RedisTemplate();
                                          // 设置连接工厂
                                          redisTemplate.setConnectionFactory(radisConnectionFactory);
                                          // 设置序列化工具
                                          GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
                                          // key和hashKey采用string序列化
                                          redisTemplate.setKeySerializer(RedisSerializer.toString());
                                          redisTemplate.setHashValueSerializer(RedisSerializer.toString());
                                          // value和hashValue采用JSON序列化
                                          redisTemplate.setValueSerializer(jsonRedisSerializer);
                                          redisTemplate.setHashValueSerializer(jsonRedisSerializer);
                                          return reidsTemplate;
                                      }外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg.picui.cn%2Ffree%2F2024%2F06%2F15%2F666cf0e6c9acb.png&pos_id=img-m430JoJ7-1718416816392)
                                      

                                      StringRedisTemplate向radis客户端传入对象数据

                                      Radis初阶 Radis基本命令与在Springboot中访问Radis

                                      @Autowired
                                      private StringRedisTemplate stringRedisTemplate;
                                      // JSON工具
                                      private	static final Objectmapper mapper = new ObjectMapper();
                                      @Test
                                      void testStringTemplate() throws JsonProcessingException{
                                          // 准备工作 实体类的创建
                                          User user = new User("虎哥",18);
                                          // 手动序列化
                                          String json = mapper.writeValueAsString(user);
                                          // 写入一条数据到redis
                                          stringRedisTemplate.opsForValue().set("user:200",json);
                                          
                                          // 读入数据
                                          String val = stringRedisTemplate.opsForValue().get("user:200");
                                          // 反序列化
                                          User user1 = mapper.redisValue(val,User.class);
                                          System.out.println("user1 = " = user1);
                                      }
                                      

                                      注意:在将上述代码封装成工具类之后,可以省略掉 准备工作 和 手动序列化 这两个步骤

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]