Redis的安装以及基本操作

Centos7.4安装redis的步骤如下(5.0.0版本)

下载
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
解压
tar xzf redis-5.0.0.tar.gz
进入redis目录
cd redis-5.0.0
编译
make
安装到指定目录下(/usr/local/redis)
make install PREFIX=/usr/local/redis
将配置文件复制到安装目录下
cp redis.conf /usr/local/redis
指定配置文件启动redis
./bin/redis-server ./redis.conf
使用客户端连接redis(若设置了密码 则需要加参数 auth password)
./usr/local/redis/bin/redis-cli
停止redis
/usr/local/redis/bin/redis-cli shutdown
pkill redis-server
让redis开机自启
vim /etc/rc.local
加入
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis-conf

/usr/local/redis/bin目录下文件作用
  redis-benchmark:redis性能测试工具
  redis-check-aof:检查aof日志的工具
  redis-check-dump:检查rdb日志的工具
  redis-cli:连接用的客户端
  redis-server:redis服务进程

redis.conf文件中可以配置的内容
    daemonize:如需要在后台运行,把该项的值改为yes
  pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
  bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
  port:监听端口,默认为6379
  timeout:设置客户端连接时的超时时间,单位为秒
  loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
  logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
  database:设置数据库的个数,默认使用的数据库是0
  save:设置redis进行数据库镜像的频率
  rdbcompression:在进行镜像备份时,是否进行压缩
  dbfilename:镜像备份文件的文件名
  dir:数据库镜像备份的文件放置的路径
  slaveof:设置该数据库为其他数据库的从数据库
  masterauth:当主数据库连接需要密码验证时,在这里设定
  requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
  maxclients:限制同时连接的客户端数量
  maxmemory:设置redis能够使用的最大内存
  appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
  appendfsync:设置appendonly.aof文件进行同步的频率
  vm_enabled:是否开启虚拟内存支持
  vm_swap_file:设置虚拟内存的交换文件的路径
  vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
  vm_page_size:设置虚拟内存页的大小
  vm_pages:设置交换文件的总的page数量
  vm_max_thrrads:设置vm IO同时使用的线程数量

Redis中的五种数据类型

  • string(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

关于string的一些操作命令如下

1    SET key value    此命令设置指定键的值。
2    GET key    获取指定键的值。
3    GETRANGE key start end    获取存储在键上的字符串的子字符串。
4    GETSET key value    设置键的字符串值并返回其旧值。
5    GETBIT key offset    返回在键处存储的字符串值中偏移处的位值。
6    MGET key1 [key2..]    获取所有给定键的值
7    SETBIT key offset value    存储在键上的字符串值中设置或清除偏移处的位
8    SETEX key seconds value    使用键和到期时间来设置值
9    SETNX key value    设置键的值,仅当键不存在时
10    SETRANGE key offset value    在指定偏移处开始的键处覆盖字符串的一部分
11    STRLEN key    获取存储在键中的值的长度
12    MSET key value [key value …]    为多个键分别设置它们的值
13    MSETNX key value [key value …]    为多个键分别设置它们的值,仅当键不存在时
14    PSETEX key milliseconds value    设置键的值和到期时间(以毫秒为单位)
15    INCR key    将键的整数值增加1
16    INCRBY key increment    将键的整数值按给定的数值增加
17    INCRBYFLOAT key increment    将键的浮点值按给定的数值增加
18    DECR key    将键的整数值减1
19    DECRBY key decrement    按给定数值减少键的整数值
20    APPEND key value    将指定值附加到键
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
  • hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

关于hash的一些操作命令如下

1    HDEL key field2 [field2]    删除一个或多个哈希字段。
2    HEXISTS key field    判断是否存在散列字段。
3    HGET key field    获取存储在指定键的哈希字段的值。
4    HGETALL key    获取存储在指定键的哈希中的所有字段和值
5    HINCRBY key field increment    将哈希字段的整数值按给定数字增加
6    HINCRBYFLOAT key field increment    将哈希字段的浮点值按给定数值增加
7    HKEYS key    获取哈希中的所有字段
8    HLEN key    获取散列中的字段数量
9    HMGET key field1 [field2]    获取所有给定哈希字段的值
10    HMSET key field1 value1 [field2 value2 ]    为多个哈希字段分别设置它们的值
11    HSET key field value    设置散列字段的字符串值
12    HSETNX key field value    仅当字段不存在时,才设置散列字段的值
13    HVALS key    获取哈希中的所有值
  • list(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

关于list的一些操作命令如下

1    BLPOP key1 [key2 ] timeout    删除并获取列表中的第一个元素,或阻塞,直到有一个元素可用
2    BRPOP key1 [key2 ] timeout    删除并获取列表中的最后一个元素,或阻塞,直到有一个元素可用
3    BRPOPLPUSH source destination timeout    从列表中弹出值,将其推送到另一个列表并返回它; 或阻塞,直到一个
可用
4    LINDEX key index    通过其索引从列表获取元素
5    LINSERT key BEFORE/AFTER pivot value    在列表中的另一个元素之前或之后插入元素
6    LLEN key    获取列表的长度
7    LPOP key    删除并获取列表中的第一个元素
8    LPUSH key value1 [value2]    将一个或多个值添加到列表
9    LPUSHX key value    仅当列表存在时,才向列表添加值
10    LRANGE key start stop    从列表中获取一系列元素
11    LREM key count value    从列表中删除元素
12    LSET key index value    通过索引在列表中设置元素的值
13    LTRIM key start stop    修剪列表的指定范围
14    RPOP key    删除并获取列表中的最后一个元素
15    RPOPLPUSH source destination    删除列表中的最后一个元素,将其附加到另一个列表并返回
16    RPUSH key value1 [value2]    将一个或多个值附加到列表
17    RPUSHX key value    仅当列表存在时才将值附加到列表
  • set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

关于set的一些操作命令如下

1    SADD key member1 [member2]    将一个或多个成员添加到集合
2    SCARD key    获取集合中的成员数
3    SDIFF key1 [key2]    减去多个集合
4    SDIFFSTORE destination key1 [key2]    减去多个集并将结果集存储在键中
5    SINTER key1 [key2]    相交多个集合
6    SINTERSTORE destination key1 [key2]    交叉多个集合并将结果集存储在键中
7    SISMEMBER key member    判断确定给定值是否是集合的成员
8    SMOVE source destination member    将成员从一个集合移动到另一个集合
9    SPOP key    从集合中删除并返回随机成员
10    SRANDMEMBER key [count]    从集合中获取一个或多个随机成员
11    SREM key member1 [member2]    从集合中删除一个或多个成员
12    SUNION key1 [key2]    添加多个集合
13    SUNIONSTORE destination key1 [key2]    添加多个集并将结果集存储在键中
14    SSCAN key cursor [MATCH pattern] [COUNT count]    递增地迭代集合中的元素
  • zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

关于zset的一些操作命令如下

1    ZADD key score1 member1 [score2 member2] 
向有序集合添加一个或多个成员,或者更新已存在成员的分数
2    ZCARD key 
获取有序集合的成员数
3    ZCOUNT key min max 
计算在有序集合中指定区间分数的成员数
4    ZINCRBY key increment member 
有序集合中对指定成员的分数加上增量 increment
5    ZINTERSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
6    ZLEXCOUNT key min max 
在有序集合中计算指定字典区间内成员数量
7    ZRANGE key start stop [WITHSCORES] 
通过索引区间返回有序集合成指定区间内的成员
8    ZRANGEBYLEX key min max [LIMIT offset count] 
通过字典区间返回有序集合的成员
9    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 
通过分数返回有序集合指定区间内的成员
10    ZRANK key member 
返回有序集合中指定成员的索引
11    ZREM key member [member ...] 
移除有序集合中的一个或多个成员
12    ZREMRANGEBYLEX key min max 
移除有序集合中给定的字典区间的所有成员
13    ZREMRANGEBYRANK key start stop 
移除有序集合中给定的排名区间的所有成员
14    ZREMRANGEBYSCORE key min max 
移除有序集合中给定的分数区间的所有成员
15    ZREVRANGE key start stop [WITHSCORES] 
返回有序集中指定区间内的成员,通过索引,分数从高到底
16    ZREVRANGEBYSCORE key max min [WITHSCORES] 
返回有序集中指定分数区间内的成员,分数从高到低排序
17    ZREVRANK key member 
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18    ZSCORE key member 
返回有序集中,成员的分数值
19    ZUNIONSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的并集,并存储在新的 key 中
20    ZSCAN key cursor [MATCH pattern] [COUNT count] 
迭代有序集合中的元素(包括元素成员和元素分值)

Redis中针对于key的操作

1    DEL key
该命令用于在 key 存在时删除 key。
2    DUMP key 
序列化给定 key ,并返回被序列化的值。
3    EXISTS key 
检查给定 key 是否存在。
4    EXPIRE key seconds
为给定 key 设置过期时间,以秒计。
5    EXPIREAT key timestamp 
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳
(unix timestamp)。
6    PEXPIRE key milliseconds 
设置 key 的过期时间以毫秒计。
7    PEXPIREAT key milliseconds-timestamp 
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8    KEYS pattern 
查找所有符合给定模式( pattern)的 key 。
9    MOVE key db 
将当前数据库的 key 移动到给定的数据库 db 当中。
10    PERSIST key 
移除 key 的过期时间,key 将持久保持。
11    PTTL key 
以毫秒为单位返回 key 的剩余的过期时间。
12    TTL key 
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13    RANDOMKEY 
从当前数据库中随机返回一个 key 。
14    RENAME key newkey 
修改 key 的名称
15    RENAMENX key newkey 
仅当 newkey 不存在时,将 key 改名为 newkey 。
16    TYPE key 
返回 key 所储存的值的类型。

Redis事务

事务中的所有命令作为单个隔离操作并按顺序执行。不可以在执行Redis事务的中间向另一个客户端发出的请求。

Redis事务也是原子的。原子意味着要么处理所有命令,要么都不处理。

事务的命令如下

1	DISCARD	丢弃在MULTI之后发出的所有命令
2	EXEC	执行MULTI后发出的所有命令
3	MULTI	标记事务块的开始
4	UNWATCH	取消 WATCH 命令对所有 key 的监视。
5	WATCH key [key …]	监视给定的键以确定MULTI / EXEC块的执行

关于多数据库

Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。

Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。

每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据
库,如要选择1号数据库:select 1

然而这些以数字命名的数据库又与我们理解的数据库有所区别。首先Redis不支持自定义数据库的名字,每个数据库都以编号命
名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端
要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,比如
FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。

综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。

Redis持久化

Redis提供了不同级别的持久化方式,一种是RDB,一种AOF。可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

RDB:在指定的时间间隔能对数据进行快照存储(隔一段时间,把内存里的数据转存在硬盘里的文件)

  • 优点:
  1. RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如您可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题您也可以根据需求恢复到不同版本的数据集.
  2. RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复.
  3. RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能.
  4. 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.
  • 缺点:
  1. 如果您希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合您.虽然您可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作),是Redis要完整的保存整个数据集是一个比较繁重的工作,您通常会每隔5分钟或者更久做一次完整的保存,万一在Redis意外宕机,您可能会丢失几分钟的数据.
  2. RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒,AOF也需要fork,但是您可以调节重写日志文件的频率来提高数据集的耐久度.

AOF:每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.

  • 优点:
  1. 使用AOF 会让您的Redis更加耐久: 您可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,您最多丢失1秒的数据.
  2. AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,您也也可使用redis-check-aof工具修复这些问题.
  3. Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。
  4. AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单: 举个例子, 如果您不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。
  • 缺点:
  1. 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
  2. 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。

Redis的优点

  1. Redis是一个基于内存的高性能key-value数据库。
  2. 单线程,利用redis队列技术并将访问变为串行访问,消除了传统数据库串行控制的开销。
  3. 支持丰富数据类型。
  4. 丰富的特性,支持 publish/subscribe、多数据库、通知、 key 过期、分布式等等。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis的Java基本操作可以通过使用Jedis库来实现。首先,你需要导入Jedis的驱动包,可以在你的项目的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> ``` 接下来,你可以使用以下代码来连接Redis服务器并进行基本操作: ```java import redis.clients.jedis.Jedis; import java.util.List; public class RedisBasicOperations { public static void main(String\[\] args) { // 连接到本地的Redis服务 Jedis jedis = new Jedis("服务器地址", 6379); // 测试连接是否成功 String response = jedis.ping(); System.out.println(response); // 输出:PONG // 清空当前选择数据库中的所有key System.out.println("删除当前选择数据库中的所有key:" + jedis.flushDB()); // 操作List数据类型 // 存储数据到列表中 jedis.lpush("list", "num1"); jedis.lpush("list", "num2"); jedis.lpush("list", "num3"); // 获取存储的数据并输出 List<String> list = jedis.lrange("list", 0, -1); for (int i = 0; i < list.size(); i++) { System.out.println("列表项为: " + list.get(i)); } } } ``` 以上代码演示了如何连接到Redis服务器并进行基本的操作,包括清空数据库和操作List数据类型。你可以根据自己的需求进行进一步的操作。 #### 引用[.reference_title] - *1* *3* [使用Java操作Redis](https://blog.csdn.net/Huang_ZX_259/article/details/122906569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java开发中对Redis基本操作](https://blog.csdn.net/m0_67094505/article/details/127605008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值