jjzjj

Redis

IsMhhla 2023-03-28 原文

Redis

概念:redis是一款高性能的nosql系列的非关系型数据库

存储的是key:value 的形式

name:zhangsan

age:23

mysql:数据存在硬盘上

redis:数据存在内存中 所以很快(存入缓存(在内存区域中开辟出一个缓存区))

redis是nosql

下载和安装

解压可以直接使用

redis.windows.conf:配置文件

redis-cli:客户端

redis-server:服务器端

命令操作

redis的数据结构

*redis存储的是:键值对格式 的数据,其中key都是字符串,value有五种不同的数据结构

​ *value的数据结构:

  1. 字符串:String
  2. hash:map
  3. list:linkedlist
  4. set:不允许重复
  5. sortedset:不允许重复字符串:String

String

  1. 存储:set: key value
  2. 获取:get:key
  3. 删除 :del:key

哈希类型 hash

  1. 存储:hset key field value
  2. 获取:hget key field
    1. hget key field:获取指定的field的值
    2. hgetall key:获取所有的field和value
  3. 删除:hdel key field

列表类型 list(允许重复):可以添加一个元素到列表的头部或者尾部(左边或者右边)

  1. 添加:
    1. lpush key value:将元素加入列表左侧
    2. rpush key value:将元素加入列表右侧
  2. 获取:
    1. lrange key start end:范围获取
  3. 删除
    1. lpop key:删除列表最左边的元素并将元素返回
    2. rpop key:删除列表最右边的元素并将元素返回

集合类型 set:不允许重复元素

  1. 存储:sadd key value
  2. 获取:smembers key:获取set集合中的所有元素
  3. 删除:srem key value:删除set集合中的某个元素

有序集合类型:sortedset:不允许重复,且元素有顺序

  1. 存储:zadd key score value
  2. 获取:zrange key start end
  3. 删除:zrem key value

通用命令

  1. keys *:查询所有的键
  2. type key:获取键对应的类型
  3. del key:删除指定的key value

持久化

  1. redis是一个内存数据库,数据是零时的,当redis服务器重启了或者电脑重启了,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中

  2. redis持久化机制:

    1. RDB:默认方式,不配置不需要进行配置,默认使用这种机制

      1. 在一定的间隔时间中,检测key的变化情况,然后去持久化数据(推荐使用)(当key变了多少次持久化)

        1. 编辑redis.windowos.conf文件

        save 900 1
        save 300 10
        save 60 10000

    2. AOF:日志记录的方式,可以记录每一条命令的操作,可以每一次的命令操作后来持久化数据

      1. appendonly no 默认关闭的 >> 改为yes (开启aof)
        1. appendfsync always:每一次操作都进行持久化
        2. appendfsync everysec:每个疫苗进行一次持久化
        3. appendfsync no :不持久化(相当于把数据放在一个很大的map集合中)

Java客户端 Jedis

Jedis:一款java操作reids数据库的工具

Jedis的下载

Jedis的操作

  1.  //获取连接
            Jedis jedis = new Jedis("localhost",6379);//可以省略
            //操作
            jedis.set("username","zhangsan");
            //关闭连接
            jedis.close();
    

Jedis各种redis中的数据结构

  1. 字符串 String

  2. 哈希类型 hash :map格式

  3. 集合类型 set :不允许重复

    *sadd

  4. 有序集合类型 sortedset:不允许重复元素,且元素有顺序

    zadd

Jedis连接池:jedisPool

使用

  1. 创建JedisPool连接池对象
  2. 调用方法 getResource()方法获取jedis的连接

有关Redis的更多相关文章

  1. Redis序列化和java存入Redis数据序列化反序列化总结 - 2

    背景:最近考虑java代码数据在保存redis时,通常要配置序列化,才能保存到redis中,然而我们知道Redis中也有序列化(RDB和AoF两种形式),有点混淆总结一下。java中数据保存redis过程序列化的原因是什么?解释:java虚拟机内存和redis内存是两块独立的内存空间,分属于两个不同的进程,不同的两个应用,在网络传输层表现为数据传输是用TCP二进制流进行传输的序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。 而跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。java中如何序列化?packagecom.gisquest.cloud.oauth

  2. javascript - node.js + socket.io + redis + rails — 实时应用程序 - 2

    我需要向我的应用程序(RubyOnRails)添加实时性,因此,我认为更好的方法是使用node.js+socket.io+redis。我在后端(node.js)中有这个application.js文件varapp=require('http').createServer();vario=require('socket.io');varredis=require('redis').createClient();var_=require('underscore')._;io=io.listen(app);io.configure(function(){io.set("transports"

  3. Redis【缓存雪崩,缓存穿透,缓存击穿】详解 - 2

    用户请求的缓存正常流程图 上图是一个正常的简单的缓存流程!!!土豆用户去访问某宝,某宝请求redis看看缓存中有没有土豆用户请求的数据,如果redis中有该数据的缓存,则直接返回数据展示出来供应用户的需求,如果redis中没有该用户请求的数据,redis就会做一件事,去数据库中进行查找,数据库中查到值了之后做两件事情,第一件事:把数据返回到redis缓存中。第二件事:把查询到的数据返回到某宝中供用户的需求缓存雪崩: 举个例子:用户在双十二的时候,想去某宝抢购商品,用户点进去进入首页展示出了各种各样的商品,这些商品大部分都是缓存在redis中,对应了着很多key,加入这些key的缓存时间是三个小

  4. go - Go中的二级缓存(内存+redis)实现 - 2

    我正在尝试写一个二级缓存(内存+redis),但是当一个key高并发访问时遇到了瓶颈,我尝试对每个key都使用mutex,但是这样增加了cpu很多因为loadFromDB需要100-200毫秒。func(s*Store)GetJsonObjectWithExpire(keystring,objinterface{},ttlint,fStoreLoadFunc)error{//firstreadfrommemoryv,ok:=s.mem.Get(key)ifok{ifv.Outdated(){to:=deepcopy.Copy(obj)gos.updateMem(key,to,ttl,f

  5. json - 在redis中将结构存储为字符串 - 2

    由于Redis仅存储字符串,我想知道如何使用Go将Struct转换为字符串,从而实现与Javascript的JSON.stringify等效的功能。我尝试过类型转换:string(the_struct)但这会导致错误。 最佳答案 encoding/json包可用于轻松地将struct转换为JSON字符串,反之亦然(将JSON字符串解析为struct)。简单示例(在GoPlayground上尝试):typePersonstruct{NamestringAgeint}funcmain(){p:=Person{"Bob",23}//Str

  6. ruby - IPTables 和不同的 Redis 客户端的奇怪问题 - 2

    我正在尝试弄清楚如何连接到Redis客户端,该客户端应该阻止端口6379上通过TCP的所有Redis连接。我正在使用的ruby​​客户端和telnet都可以连接和执行命令。我使用的golang客户端不能,我真的很困惑为什么。这是我的iptables定义:root@server:~#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTall--localhostanywhereACCEPTall--anywhereanywherectstateRELATED,ESTABLISHEDACCEPTtcp-

  7. Redis系列三:thinkphp 使用 redis - 2

    1、redis服务端配置认证密码(1)通过配置文件进行配置打开配置文件/usr/local/redis/etc/redis.conf找到#requirepassfoobared去掉行前的注释,并修改密码为所需的密码,保存文件requirepassmyRedis重启redis这个时候尝试登录redis,发现可以登上,但是执行具体命令是提示操作不允许1.redis-cli-h127.0.0.1-p63792.redis127.0.0.1:6379>3.redis127.0.0.1:6379>keys*4.(error)ERRoperationnotpermitted5.redis127.0.0.1

  8. Redis数据结构之——hash - 2

    写在前面以下内容是基于Redis6.2.6版本整理总结一、Redis数据结构hash的编码格式Redis中hash数据类型使用了两种编码格式:ziplist(压缩列表)、hashtable(哈希表)在redis.conf配置文件中,有以下两个参数,意思为:当节点数量小于512并且字符串的长度小于等于64时,会使用ziplist编码。hash-max-ziplist-entries512hash-max-ziplist-value64二、压缩链表(ziplist)ziplist我们整理在下一篇文章。三、哈希表(hashtable)Redis中的字典(dict)使用哈希表作为的底层实现,一个哈希表

  9. go - conn.flush() 不会将所有记录刷新到 redis - 2

    这是代码funcmain(){...pool:=createPool(*redis_server,*redis_pass)deferpool.Close()c:=pool.Get()variint64st:=tickSec()fori=0;i如果我使用c.Close(),总集数为100000,真正的排序集数为100000。但是如果我使用c.Flush(),总数也设置为100000,真正的sortedset计数小于100000(96932);如果我在主函数的末尾使用time.Sleep(),总数也是100000。当mainfunc退出时,flushfunc没有完成?为什么?谢谢!

  10. 面试官:Redis集群有哪些方式,Leader选举又是什么原理呢? - 2

    哈喽!大家好,我是小奇,一位不靠谱的程序员小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!文章目录一、前言二、面试三、Redis哨兵集群四、Redis高可用集群Cluster模式五、Leader选举原理六、总结一、前言作为一名Java程序员,Redis底层的一些原理是我们不必学会就可以搬砖工作的一种技能点,但是小奇为什么还要讲一下呢?难道就是为了浪费大家1分钟的宝贵时间,一个人1分钟,50万人就是1年,5000万人就是100年,赚了,小奇以一己之力

随机推荐