redis的基本介绍

一、Redis的基本介绍

Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。
它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库。

1、优点:

Redis 作为一个内存数据库:

  • 性能优秀,数据在内存中,读写速度非常快,支持并发 10W QPS。

  • 单进程单线程,是线程安全的,采用 IO 多路复用机制。

  • 丰富的数据类型,支持字符串(string)、散列(hash)、列表(list)、集合(set)、有序集合(sort set)等。

  • 支持数据持久化。
    可以将内存中数据保存在磁盘中,重启时加载。

  • 主从复制,哨兵,高可用。

  • 可以用作分布式锁。

  • 可以作为消息中间件使用,支持发布订阅。

2、五种数据类型:

我们首先了解下 Redis 内部内存管理是如何描述这 5 种数据类型的。

在这里插入图片描述

首先 Redis 内部使用一个 redisObject 对象来表示所有的 key 和 value。

  1. type :代表一个 value 对象具体是何种数据类型。

  2. encoding :是不同数据类型在 redis 内部的存储方式,比如:type=string 代表 value 存储的是一个普通字符串,那么对应的 encoding 可以是 raw 或者是 int,如果是 int 则代表实际 redis 内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:“123” "456"这样的字符串。

  3. vm 字段:只有打开了 Redis 的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的。 Redis 使用 redisObject 来表示所有的 key/value 数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给 Redis 不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用。

2.1 String

String 是 Redis 最基本的类型,一个 Key 对应一个 Value。Value 不仅是 String,也可以是数字。
String 类型是二进制安全的,意思是 Redis 的 String 类型可以包含任何数据,比如 jpg 图片或者序列化的对象。String 类型的值最大能存储 512M。
功能

  • 设置值:覆盖,创建新的(单个 key;多个 key)
  • 获取值:获取单个,多个,获取后再修改
  • 修改值:直接覆盖,追加,获取后再覆盖,修改指定位置
  • 获取长度
命令名称命令使用格式命令介绍命令例子
setset key value设置指定 key 的值set a 23
getget key获取指定 key 的值get a
setnxsetnx key valuenx 表示: not exists , 如果不存在则进行设置setnx a 45
getsetgetset key value获取指定 key 的值然后再进行重新设置getset a 89
setrangesetrange key startIndex value表示把指定的 key 的值从开始索引开始使用 value 这个值进行替换setrange str 2 你好
msetmset key1 value1 key2 value2…批量设置数据结构mset b 34 c 56
msetnxmsetnx key1 value1 key2 value2…nx 表示: not exists , 如果可已经存在那么设置 失效msetnx a 11
getrangegetrange key startIndex endIndex获取指定返回内的数据getrange str 0 3
mgetmget key1 key2…批量获取多个 key 的值mget a b
incrincr key自增 1incr a
incrbyincrby key num自增指定的数值incrby a 5
decrdecr key自减 1decr a
decrbydecrby key num自减指定的数值decrby a 2
appendappend key str给指定的 key 追加指定的 value 的值append a 哈 哈
strlenstrlen key获取指定的 key 的值长度strlen a

2.2 Hash

类似于 Java 中的 Map 结构,数据是由 key-value 键值对组成的
功能:

  • 添加:hset,hmset
  • 修改:直接 set 就能修改
  • 删除:根据 field 进行删除
  • 获取:hget,hmget
命令名称命令使用格式命令介绍命令例子
hsethset key field value给指定的 key 添加 key-value 元素hset user01 name zhangsan
hgethget key field获取指定的 key 中 filed 字段的值hget user01 name
hsetnxhsetnx key field value如果 key 不存在进行插入,如果 key 和 field 都存在不进行插入hsetnx user01 name lisi
hexistshexists key field判断指定的 key 中是否存在 field 这个字段hexists user01 name
hlenhlen key获取指定的 key 中字段的数量hlen user01
hdelhdel key field1 field2…删除指定的 key 中的指定的字段hdel user01 name
hincrbyhincrby key filed count给指定的key的field的字段添加或 者减去 count 这个值hincrby user01 age 4
hgetallhgetall key获取 key 中所有的键值对hgetall user01
hkeyshkeys key获取指定的 key 中所有的字段hkeys user01
hmgethmget key field1 field2…获取指定的 key 中多个字段的值hmget user01 name age
hmsethmset key field1 value1 field2 value2…同时设置多个键值对数据hmset user01 phone 13121031209
hvalshvals key获取指定的 key 中所有的 valuehvals user01
hincrbyfloatl oat hincrbyfloat key field value给指定的字段添加浮点数的值hincrbyfloa t user01 age 3.4

2.3 List

在 redis 中 list 相当于我们 java 中的 LinkedList 可以从头部给列表添加元素,也可以从尾部给列表添加元素
**功能: **

  • 加入元素:左(头)加入,右(尾)加入,在指定元素的前后插入元素
  • 取元素:都是从左开始取(取集合,指定索引)
  • 修改元素:修改指定索引位置的元素 删除元素:
  • 删除指定值的元素,从左/右开始删除元素,
  • 获取 list 长度
命令名称命令使用格式命令介绍命令例子
lpushlpush key value1 value2 …往 list 集合中压入元素(l:表示左 的意思)lpush list01 23 45
lrangelrange key startIndex endIndex从集合中获取元素lrange list01 0 -1
linsertlinsert key before/after value newValue在指定的元素前或者后插入元素linsert list01 before 23 56
lsetlset key index newValue设置指定下标的值lset list01 1 88
lremlrem key count value删 除 count 个 与 value 相 同 的 元 素,count=0 表示删除所有lrem list 1 56
lpoplpop key从 list 的头部删除元素lpop list01
lindexlindex key index返回指定索引处的元素lindex list01 1
llenllen key返回列表的长度llen list01
rpushrpush key value从末尾压入元素(r:表示右的意思)rpush list01 100
rpoprpop key从尾部删除一个元素rpop list01
rpoplpus hrpoplpush key1 key2从 key1 链表中弹出最后一个元素然 后压入到 key2 链表中rpoplpush list01 list02

2.4 Set

Redis 的 Set 是 String 类型的无序集合
集合成员是唯一的,这就意味着集合中不能出现重复的数据。类似于 java 中的 set 集合

命令名称命令使用格式命令介绍命令例子
saddsadd key member1 member2…添加元素sadd set01 23 45 67 45
scardscard key获取成员的数量scard set01
smemberssmembers key获取所有的成员smembers set01
sismembersismember key member判断是否存在 member 这个成员sismember set01 23
spopspop key随机弹出一个成员spop set01
srandmembersrandmember key [count]随机获取一个或者多个成员srandmember set01 2
sremsrem key member1 member2 …删除一个或者多个成员,如果成员 不存在则忽略srem set01 23 45
smovesmove source desition member移动一个成员到指定的 set 中smove set01 set02 23
sdiffsdiff first-key key1 key2…返回给定集合之间的差集。不存在 的集合 key 将视为空集sdiff set01 set02
sdiffstoresdiffstore destionset key1 key2 …把获取到的差集保存到目标 set 中sdiffstore set03 set01 set02
sintersinter key1 key2…获取交集sinter set01 set02
sinterstoresinterstore destionset key1 key2…把获取到的交集存储到目标 set 中sinterstore set03 set 01 set02
sunionsunion key1 key2…获取并集sunion set01 set02
sunionstoresunionstore destionset key1 key2…把获取到的并集存储到目标 set 中sunionstore set03 set01 set02

2.5 Zset(sortedSet)

redis 有序集合和 set 集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。
redis 正是通过分数来为集合中的成员进行从小到大的排序。

命令名称命令使用格式命令介绍命令例子
zaddzadd key score1 member1 score2 member2…添加成员zadd zset01 1 a 2 b 3 c 4 d 5 e
zcardzcard key计算元素个数zadd zset01
zrangezrange key start stop [WITHSCORES]返回指定排名之间的成员(结果 是分数由低到高)zrange zset01 1 3 withscores
zrevrangezrevrange key start stop [WITHSCORES]返回指定排名之间的成员(结果 是分数由高到低)zrevrange zset01 1 3 withscores
zincrbyzincrby key number member给指定的 member 的分数添加或 者减去 number 这个值zincrby zset01 3 a
zcountzcount key min max获取分数在min和max之间的成 员和数量; 默认是闭区间; 想 不包含可以: (min (maxzcount zset01 3 5
zrangebyscorezrangebyscore key min max [withscores]根据分数的范围获取成员(按照 分数: 从低到高)zrangebyscore zset01 2 5
zrevrangebyscorezrevrangebyscor e key max min [withscores]根据分数的范围获取成员(从高 到低)zrevrangebyscore zset01 2 5
zrankzrank key member返回一个成员的排名(从低到高 的顺序)zrank zset01 3
zrevrankzrevrank key member返回一个成员的排名(从高到 低)zrevrank zset01 3
zscorezscore key member获取一个成员的分数zscore zset01 3
zremzrem key member1 member2…删除指定的成员zrem zset01 2
zremrangebyrankzremrangebyrank key start stop根据排名进行删除zremrangebyrank zset01 1 4
zremrangebyscorezremrangebyscor e key min max根据分数的范围进行删除zremrangebyscore zset01 2 6

_
注: 和 storedset 类型的数据结构相关的命令都是以 z 开始的

3 、对 Key 的通用操作

Redis 是一个 key-value 的数据库,我们可以直接对应 key 进行相关操作

命令名称命令使用格式命令介绍命令例子
keyskeys pattern根据指定的规则返回符合条件的 keykeys set0*
deldel key1 key2…删除指定的 keydel set01
existsexists key判断是否存在指定的 keyexists set01
movemove key db将指定的 key 移入到指定的数据库 中: redis 默认存在 16 个库 select 10 : 表示选择 9 号库move set02 10
renamerename key newkey对 key 进行重命名rename set02 set06
renamenxrenamenx key newkey仅当 newkey 不存在时,将 key 改 名为 newkeyrenamenx set06 set07
typetype key返回 key 的类型type set01
expireexpire key second给指定的 key 设置失效时间,单位为 秒rexpire set01 60
persistpersist key移除 key 的失效时间persist set01
ttlttl key以秒为单位返回 key 的剩余时间(返 回-2 表示 key 不存在, 返回-1 表示 永远不过时)ttl set01
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lettuce是一个基于Java的Redis客户端,用于与Redis服务器进行交互。它提供了一种简单而高效的方式来连接、发送命令和接收响应。 下面是使用Lettuce连接和操作Redis基本步骤: 1. 添加Lettuce依赖:将Lettuce的Maven或Gradle依赖添加到你的项目中。 2. 创建Redis连接:使用`RedisClient.create()`方法创建一个RedisClient对象,该对象代表与Redis服务器的连接。 ```java RedisClient client = RedisClient.create("redis://localhost:6379"); ``` 3. 创建连接状态:使用`client.connect()`方法创建一个StatefulRedisConnection对象,该对象代表与Redis服务器的连接状态。 ```java StatefulRedisConnection<String, String> connection = client.connect(); ``` 4. 获取Redis命令发送器:使用`connection.sync()`方法获取一个同步命令发送器,该对象用于发送同步命令到Redis服务器并接收响应。 ```java RedisCommands<String, String> commands = connection.sync(); ``` 5. 执行Redis命令:使用`commands`对象执行各种Redis命令,比如`set`、`get`、`incr`等。 ```java commands.set("key", "value"); String value = commands.get("key"); ``` 6. 关闭连接:在完成操作后,记得关闭连接以释放资源。 ```java connection.close(); client.shutdown(); ``` 以上是Lettuce的基本用法示例。除了同步命令发送器外,Lettuce还提供了异步命令发送器和响应式命令发送器,可以根据需要选择适合的方式进行操作。 需要注意的是,以上示例中的连接URL、主机和端口号可能需要根据你的实际情况进行修改。 希望这个简单介绍能帮助到你!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值