redis是什么?

  • redis是一个开源的、可基于内存也可持久化的Key-Value数据库,常用的NoSQL数据库之一。
    它可以用作数据库、缓存和消息中间件。NoSQL不单单是sql,还有很多其他功能。
  • redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
    与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis缓存数据库目前已大量的应用,广泛用于存储session信息,权限信息,交易作业等热数据

Windows安装Redis:

下载安装

下载地址:点击我下载Redis-x64-3.2.100(32位操作系统的请自行下载)
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 D盘,解压1558527117.png
解压后直接运行redis-server.exe服务端,看到如下界面,不要关闭.
84045608.png
如果闪退,则打开一个 cmd 窗口 使用 cd 命令切换目录到redis存储位置 运行:

redis-server.exe redis.windows.conf

这时候运行另一个 redis-cli.exe 客户端,原来的不要关闭,不然就无法访问服务端了。
990833596.png
1487243083.png

redis基本命令

redis中文官方网站:传送门
Redis命令十分丰富,包括的命令组有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions一共14个redis命令组两百多个redis命令。

基础信息

1 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
2 默认端口号:6379。
3 redis默认有16个数据库,类似数组下表从零开始,初始默认使用零号库,可以使用select index 命令来切换数据库。
4 DBSIZE 命令用来得到所选数据库key数量。
5 FLUSHDB 清空当前库。

嗷嗷嗷,哈哈!不知道标题用啥好!!

准备工作:我这里用的软件是IDEA
在pom.xml中添加Jedis依赖。

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

配置redisConfig.xml属性文件:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  
    <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>  
    <!-- redis连接池的配置 -->  
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxTotal" value="${redis.maxActive}"/>  
        <property name="maxIdle" value="${redis.maxIdle}"/>   
        <property name="maxWaitMillis" value="${redis.maxWait}"/>  
    </bean>  
      
    <!-- redis的连接池pool,不是必选项:timeout/password  -->  
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">  
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
        <constructor-arg name="host" value="${redis.host}" />
        <constructor-arg name="port" value="${redis.port}" type="int" />
    </bean>  
</beans>

配置redis服务器连接信息,以便redis配置文件属性获取。
1492362053.png
Spring-mybatis全局配置文件中,引入redis配置文件
1594916823.png
java连接jedis测试API

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"} )
public class RedisApiTest {

    Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    JedisPool jedisPool;

    Jedis jedis = null;

    @Before
    public void getConn(){
   //    jedis = new Jedis("127.0.0.1",6379);
        jedis = jedisPool.getResource();
    }
    @Test
    public void testString(){

        // 添加数据到缓存中
        jedis.set("key1","value1");
        jedis.set("key2","value2");
        jedis.set("key3","value3");

        logger.debug("----> 存入缓存中");

        // 获取缓存中的数据
        logger.debug("----> 获取缓存中的数据:" + jedis.get("key1"));

        // 删除缓存中的数据
        jedis.del("key1");
        logger.debug("----> 删除后的缓存数据:" + jedis.get("key1"));
    }

    @Test
    public void testHash(){  // 对象

        // 添加数据到缓存中
        jedis.hset("hash1","username","KK");

        // 获取缓存中的数据
        logger.debug("----> 获取缓存中的数据:" + jedis.hget("hash1","username"));


        // 同时存储多个字段和值

        Map<String,String> map = new HashMap<>();
        map.put("username","YY");
        map.put("age","18");
        map.put("sex","男");
        jedis.hmset("hash2",map);

        // 获取缓存中的数据
        List<String> stringList = jedis.hmget("hash2", "username", "age", "sex");

        logger.debug("----> 获取缓存中的数据:" + stringList);

    }

    @Test
    public  void testList(){

        // 存储数据到列表中
        jedis.lpush("list","A","B","C","D","E");
        // 获取缓存中的列表所有数据
        List<String> list = jedis.lrange("list", 0, -1);
        for (int i=0;i<list.size();i++){
            logger.debug("----> 获取列表的数据:" + list.get(i));
        }

        // 模拟队列 先进先出
        // 如何移出并获取先进去的元素
        logger.debug("----> 获取列表最早放进去的数据:" + jedis.rpop("list"));

        // 模拟 先进后出
        // 如何移出并获取后进去的元素
        logger.debug("----> 获取列表最后放进去的数据:" + jedis.lpop("list"));
    }

}


注意:Java连接redis服务端,如果使用的不是127.0.0.1,而是本地ip例如192.168.6.246。
会出现如下错误:
Redis远程连接失败-“Connection reset by peer”的解决方式
在网上查找原因,说是要将配置文件中的bind 127.0.0.1注释掉。为什么呢?
分析原因如下:
redis-server在启动时,如果没有指定配置文件的话,它使用的是默认的配置文件。
在修改配置文件时,发现bind 127.0.0.1句处上方的注释为
2004059354.png

今天开始学习redis,ヾ(◍°∇°◍)ノ゙!!!

Last modification:September 10th, 2019 at 02:28 pm
如果觉得不错,请随意赞赏