美文网首页
2019-06-11redis快速入门

2019-06-11redis快速入门

作者: 果冻_4c9b | 来源:发表于2019-06-11 14:39 被阅读0次

redis属于NoSql分类,它把数据都是缓存在内存中的,我们都知道内存的读写效率跟硬盘不是一个级别的,最后redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。既然用redis读取效率那么高,最后内容也会添加到磁盘那么我们就当然要使用它了。
下载安装Redis
打开Redis服务配置文件。注意:不要找错了,通常为redis.windows-service.conf,而不是redis.windows.conf。
找到含有requirepass字样的地方,追加一行,输入requirepass 12345。这是访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处以简单的12345来演示


image.png

确定服务启动


image.png
下载安装redis桌面管理工具 redis-desktop-manager
启动后新建连接
image.png
基本操作
image.png

若启动命令行测试


image.png

1.Redis基本操作

redis是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset–有序集合)和hash(哈希类型)五种数据类型,存储形式均为字符串。

①String类型

存储:set key value
取值:get key
删除:del key
查看所有键:keys

127.0.0.1:6379> set key1 "nihao"
OK
127.0.0.1:6379> set key2 "haha"
OK
127.0.0.1:6379> keys *
1) "key1"
2) "key2"

增1:incr key
减1:decr key
注意, 虽然redis存储形式都是字符串,但是自增减的时候要求value必须能解析成数值类型,比如你的value是”1ad”那就不行。
示例:先添加键值对 str1 3,再自增就成了4

127.0.0.1:6379> set key3 "3"
OK
127.0.0.1:6379> get key3
"3"
127.0.0.1:6379> incr key3
(integer) 4
127.0.0.1:6379> get key3
"4"

②Hash类型

相当于一个key对于一个map,map中还有key-value
存储:hset key field value
取值:hget key field

127.0.0.1:6379> hset zhangsan age 33
(integer) 1
127.0.0.1:6379> hset zhangsan weight 66
(integer) 1
127.0.0.1:6379> hget zhangsan age
"33"
127.0.0.1:6379> hget zhangsan weight
"66"
image.png

查看某个键对应的map里面的所有key:hkeys key
查看某个键对应的map里面的所有的value:hvals key
查看某个键的map:hgetall key

java5:0>hkeys zhangsan
 1)  "age"
 2)  "weight"
java5:0>hvals zhangsan
 1)  "33"
 2)  "66"
java5:0>hgetall zhangsan
 1)  "age"
 2)  "33"
 3)  "weight"
 4)  "66"

③List类型

存储:push,分为lpush list v1 v2 v3 v4 …(左边添加),rpush list v1 v2 v3 v4 …(右边添加)

java5:0>lpush list1 1 2 3 4
"4"
image.png

取值:pop,分为lpop lpop list(左边取,移除list最左边的值) ,rpop rpop list(右边取,移除list最右边的值)

java5:0>lpop list1
"4"
image.png

查看list:lrange key 0 2

lrange key 0 -1表示查看全部

java5:0>lrange list2 0 2
 1)  "wangwu"
 2)  "lisi"
 3)  "zhangsan"

存储,取值操作跟栈的存储,取值方法是一样的,而不是add,get,存储的值有序可以重复。用pop取值取完后该值就从list中移除了。

④Set类型

Set中的元素是无序不重复的,出现重复会覆盖
存储:sadd key v1 v2 v3 …

java5:0>sadd set1 hello world 123
"3"

移除:srem key v

java5:0>srem set1 123
"1"

查看set集合: smembers key

java5:0>smembers set1
 1)  "world"
 2)  "hello"

另外还提供了差集,交集,并集操作
差集:sdiff seta setb(seta中有setb中没有的元素

redis:0>sadd set1 hello world nihao haha
"4"
redis:0>sadd set2 hello2 world2 nihao haha
"4"
redis:0>sdiff set1 set2
 1)  "hello"
 2)  "world"

交集:sinter seta setb

redis:0>sinter set1 set2
 1)  "haha"
 2)  "nihao"

并集:sunion seta setb

redis:0>sunion set1 set2
 1)  "hello2"
 2)  "haha"
 3)  "world"
 4)  "hello"
 5)  "world2"

⑤SortedSet,有序Set

存储:存储的时候要求对set进行排序,需要对存储的每个value值进行打分,默认排序是分数由低到高。zadd key 分数1 v1 分数2 v2 分数3 v3…

redis:0>zadd zset1 1 a 3 b 2 c 6 d 5 e 4 fredis:0> 
"6"
redis:0>zrange zset1 0 -1
 1)  "a"
 2)  "c"
 3)  "b"
 4)  "f"
 5)  "e"
 6)  "d"

取值:取指定的值 zrem key value(取出后,Set当中对应少一个)

redis:0>zrem zset1 b
"1"
redis:0>zrem zset1 a
"1"
redis:0>zrem zset1 c
"1"
image.png

取(遍历)所有的值(不包括分数):zrange key 0 -1,降序取值用zrevrange key 0 -1

redis:0>zrange zset1 0 -1
 1)  "f"
 2)  "e"
 3)  "d"

redis:0>zrevrange zset1 0 -1
 1)  "d"
 2)  "e"
 3)  "f"

取所有的值(带分数):zrange(zrevrange) key 0 -1 withscores

redis:0>zrange zset1 0 -1 withscores
 1)  "f"
 2)  "4"
 3)  "e"
 4)  "5"
 5)  "d"
 6)  "6"

⑥key命令

由于redis是内存存储数据,所以不能够存储过大的数据量,所以存储在redis中的数据,在不再需要的时候应该清除掉。比如,用户买完东西下订单,生成的订单信息存储了在redis中,但是用户一直没支付那么存储在redis中的订单信息就应该清除掉,这个时候就可以通过设置redis的过期时间来完成,一旦达到了过期时间就清除该信息。
设置key的过期时间:expired key 过期时间(秒)
查看key的有效剩余时间:ttl key

redis:0>expire zone 60 // 以秒为单位
"0"

redis:0>ttl zone
"-2"

redis:0>expire zset1 30
"1"

redis:0>ttl zset1
"23"

redis:0>ttl zset1
"6"

redis:0>ttl zset1
"-2"

清除key的过期时间,持久化该key:persist key

-1:表示持久化

-2:表示该key不存在

redis:0>expire set1 200
"1"

redis:0>ttl set1
"194"

redis:0>ttl set1
"172"

redis:0>persist set1
"1"

redis:0>ttl set1
"-1"

对于上面的基本操作,一般而言,至少得要掌握String类型,Hash类型以及key命令。

项目中使用redis

pom.xml引入的依赖

<!--    redis-->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.8.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-commons</artifactId>
      <version>1.8.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>

dp.properties需要配置的

redis.host=10.25.36.136
redis.port=6379
redis.password=123456

redis.maxIdle=300
redis.maxWaitMillis=1000
redis.maxTotal=600
redis.testOnBorrow=true
redis.testOnReturn=true

applicationContext-redis.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--设置连接池-->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="maxTotal" value="${redis.maxTotal}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
        <property name="testOnReturn" value="${redis.testOnReturn}" />
    </bean>

    <!--设置链接属性-->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName"><value>${redis.host}</value></property>
        <property name="port"><value>${redis.port}</value></property>
        <property name="password"><value>${redis.password}</value></property>
        <property name="poolConfig"><ref bean="poolConfig"></ref></property>
        <property name="timeout"><value>100000</value></property>
    </bean>

    <!-- Jedis模板配置  -->
    <bean id="redisMapper" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>

</beans>


@Service
public class UserInfoServiceImpl implements UserInfoService {
    @Autowired
    UserInfoMapper userInfoMapper;
    @Autowired
    private RedisTemplate redisTemplateMappper;

    @Override
    public PageDateUtils serchBy(PageUtils pageUtils) {
        PageDateUtils pageDateUtils = new PageDateUtils();
        pageDateUtils.setList(userInfoMapper.serchBy(pageUtils));
        //到redis查看有没有代表总数的的数据,如果有直接赋值给total属性
        Object object= redisTemplateMappper.opsForValue().get("totalCount");
      if (object!=null){
          System.out.println("redis你好");
          String str= (String) object;
          pageDateUtils.setTotal(Integer.valueOf(str));
    }else{
          //否则查询mysql,然后再给redis存入
          System.out.println("mysql你好");
          int total = userInfoMapper.findTotal(pageUtils);
          redisTemplateMappper.opsForValue().set("totalCount",String.valueOf(total));
          pageDateUtils.setTotal(total);
      }
        return  pageDateUtils;
    }
}

相关文章

网友评论

      本文标题:2019-06-11redis快速入门

      本文链接:https://www.haomeiwen.com/subject/ohfqfctx.html