2、Redis的基础知识
- redis单进程
- redis多数据库
- redis的key的操作
- redis的value五种类型
1、redis单进程
Redis的服务器程序采用的是单进程的模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。
Redis的实际处理速度完全依赖主进程的执行效率,假如同时有多个客户端并发访问服务器,则服务器处理能力在一定情况下将会下降。假如要提升服务器的并发能力,那么可以采用在单台机器上部署多个redis进程的方式。
--------------------------------------------------------------------
2、redis多数据库
(1)Redis每个数据库对外都是0开始递增的数字来命名,默认16个数据库,默认使用0号数据库,可以使用 select+数字 来选择数据库
(2)可以使用命令:Dbsize 查看当前数据库的key的数量
(3)可以使用命令:move key 目的数据库编号,在多个数据库间移动数据
(4)可以使用命令:flushdb,清除某个数据库的数据
(5)Redis不支持自定义数据库名字,默认是: 0、1、2、3、4 ... 15
(6)Redis不支持为每个数据库设置不同的访问密码
(7)多个数据库之间并不是完全独立的,可以使用命令:FlushAll,清空redis全部的数据
--------------------------------------------------------------------
3、redis的key的操作
(1)Redis的key只能是字符串类型
(2)对Redis的keys的常用操作命令
2.1、keys:获取符合规则的键名列表
格式是keys pattern, pattern支持glob风格通配符格式:
? 匹配一个字符
* 匹配任意字符
[] 匹配中括号内的任一字符,可以用 - 来表示范围
\x 匹配字符x,用于转义符号
2.2、exists:判断键值是否存在,格式是:exists key
2.3、del: 删除key,格式是:del key
2.4、type: 获取键值的数据类型,格式是:type key
2.5、rename:改名,格式是: rename oldKey newKey
2.6、renamenx: 如果不存在则改名,格式是:renamex oldKey newKey,(这里不存在是指,newKey不存在)
用java代码来示例上面的命令操作:
1 import redis.clients.jedis.Jedis; 2 3 import java.util.Set; 4 5 /** 6 * redis的key操作示例 7 */ 8 public class RedisKeyOperate { 9 public static void main(String[] args) { 10 Jedis jedis = new Jedis("127.0.0.1",6379); 11 12 /** 13 * 示例1: 相当于执行 keys * 14 */ 15 Set<String> keys = jedis.keys("*"); 16 keys.stream().forEach(System.out::println); 17 18 System.out.println("======================"); 19 20 /** 21 * 示例2: 相当于执行 keys k? 22 */ 23 Set<String> keys1 = jedis.keys("k?"); 24 keys1.stream().forEach(System.out::println); 25 26 System.out.println("======================"); 27 28 /** 29 * 示例3: 相当于执行 exists k1 30 */ 31 Boolean existsKey = jedis.exists("k1"); 32 System.out.println("existsKey = " + existsKey); 33 34 System.out.println("======================"); 35 36 /** 37 * 示例4: 相当于执行 del k1 38 */ 39 Long delK1 = jedis.del("k1"); 40 System.out.println("delK1 = " + delK1); 41 42 System.out.println("======================"); 43 44 /** 45 * 示例5: 相当于执行 type k2 46 */ 47 String typeK2 = jedis.type("k2"); 48 System.out.println("typek2 = " + typeK2); 49 50 System.out.println("======================"); 51 52 53 /** 54 * 示例6: 相当于执行 rename k2 k22 55 */ 56 String renameK2 = jedis.rename("k2", "k22"); 57 System.out.println("renameK2 = " + renameK2); 58 System.out.println("======================"); 59 60 /** 61 * 示例7: 相当于执行 renamenx t1 t11 62 */ 63 Long renamenxt1 = jedis.renamenx("t1", "t11"); 64 System.out.println("renamenxt1 = "+renamenxt1); 65 } 66 }
--------------------------------------------------------------------
4、redis的value五种类型
- String:字符串,可以存在String、Integer、Float型的数据,甚至是二进制数据,一个字符串最大容量是512M
- List: 字符串List,底层实现上不是数组,而是链表,也就是说头部和尾部插入一个新元素,其时间复杂度是常数级别的;其弊端是:元素的定位比数组慢。
- Set: 字符串Set,无序不可重复,是通过HashTable实现的
- Hash: 按Hash方式来存放字符串
- ZSet: 字符串set,有序且不可重复,根据Score来排序。底层使用散列表和跳跃表来实现,所以读取中间部分的数据也很快
--------------------------------------------------------------------